コンパイラーによって Java SE 6 または 7 のアノテーション・プロセッサーでインスタンスを使用できるようにする必要があるユーティリティー・インターフェースTypesのドキュメントには、私が取り組んでいるコード・スニペットで興味深い 2 つのメソッドがあります。フィールドの型が特定の抽象クラスから継承された型であるかどうかを確認する必要があります。適用できると思われる 2 つの方法はisAssignable
、 とisSubtype
です。しかし、これらのどれを使用するかはわかりません。
上記のドキュメントで参照されている Java 言語仕様の部分を確認しました。サブタイプと割り当て変換の概念の違いを理解しています (少なくとも私は理解していると思います)。私が間違っていない限りjava.lang.Short
、プリミティブのサブタイプにはなりません (サブタイプはプリミティブlong
間で定義されますが、クラスやプリミティブ間では定義されません)。
final Short s = 0;
final long l = s;
ただし、私の場合、どの方法を使用するのが最適かはまだわかりません。サブタイプのチェックは、割り当て可能性よりも厳密で好ましいように見えますが、クラスに関しては、一方が他方を自動的に暗示しているように感じます。
長いバージョンの短い:比較された TypeMirrors が両方ともクラス (インターフェイスまたは列挙型ではない) の場合、同等ですかisAssignable
?isSubtype