注釈プロセッサを作成していますが、特定のインターフェイスが実装されているかどうかを確認する必要があります。 質問Java Annotations Processor: Check if TypeMirror implements specific interfaceは、ジェネリックでないインターフェイスに対する回答を提供します。 しかし、String
がComparable<String>
を実装しているなど、汎用インターフェイスでは機能しません。また、isAssignableを使用するコードは機能しません。Java Annotation Processor:TypeMirrorが特定のジェネリックインターフェイスを実装しているかどうかを確認します。
TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror serializable = elementUtil.getTypeElement("java.io.Serializable").asType();
boolean isSerializable = typeUtil.isAssignable(tm, serializable);
//here isSerializable is true
しかし、このコードはしていません::
このコードは期待どおりに動作
TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror comparable = elementUtil.getTypeElement("java.lang.Comparable").asType();
boolean isComparable = typeUtil.isAssignable(tm, comparable);
//here isComparable is false
私が思うに、その理由は「同等の」TypeElementがジェネリックとして文字列で定義されていること、であること私はそれを回避する方法を知らない。
あなたは 'tm'を定義しませんでした。 (スニペットの代わりに)コンパイルして実行できる完全なファイルを与えることは、他の人があなたの問題を理解し、あなたを助けるのに役立ちます。 – mernst
tmはTypeMirror for Stringです。 – AreSo