0

私はいくつかのコードを見て、それを理解しようとしています。以下のコードでは、インターフェースが注釈を拡張します。なぜそれが可能なのかわかりません。注釈を拡張するインターフェースを持つことのポイントは何ですか? 注釈を拡張するインターフェースを使用するには? ありがとう!

public interface TheScope extends javax.inject.Scope {
    ...
}

public ScopeClazz implements TheScope {
    ...
}
4

3 に答える 3

1

Java注釈型の仕様によると、次のようになります。

ここで明示的に変更されていない限り、通常のインターフェイス宣言に適用されるすべての規則が注釈型宣言に適用されます。

たとえば、注釈型は、通常のクラスおよびインターフェイス型と同じ名前空間を共有します。および注釈型の宣言は、インターフェイス宣言が有効である場合はどこでも有効であり、同じスコープとアクセシビリティを持ちます。

したがって、インターフェイスと同じように注釈型を実装できます。唯一の違いは、注釈を別の注釈で拡張できないことです。

于 2013-01-16T00:54:05.350 に答える
0

注釈として使用できることを除けば、注釈型は通常のインターフェースです。これは、実行時に注釈を読み取るときに役立ちます。これは、注釈を注釈型のインスタンスとして表すことができるためです。

この実装選択の副作用として、他のインターフェイスと同様に拡張または実装できます。これは、この型を注釈として使用することとは完全に無関係です。これは、同じ型が 2 つの異なるもの (注釈型と通常のインターフェイス) に使用されることを意味するため、そのような使用法は関心の分離に違反する可能性が高く、一般的ではありません。ただし、言語の観点からは、セマンティクスは明確であり、危険ではないため、このコーナー ケースの発生を防ぐためにコンパイラを必要とする理由はほとんどありません。

于 2013-01-16T01:21:19.673 に答える
0

javax.inject.Scope もインターフェイスです (他に?!) http://docs.oracle.com/javaee/6/api/javax/inject/Scope.htmlを参照してください

于 2013-01-16T00:47:33.283 に答える