【发布时间】:2014-08-10 16:17:20
【问题描述】:
我有一个很有趣的问题。 我已经定义了注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnot {
}
我有:
public interface F<T>{
public void onFinish(T param);
}
public abstract class Foo<T> implements F<T>{
}
还有:
public class Bar extends Foo<Drawable>{
@Override
@MyAnnot
public void onFinish(Drawable d){
// ...
}
}
还有:
public class FooBar extends Bar{
@Override
@MyAnnot
public void onFinish(Drawable d){
// ...
}
}
在 Foo 中我添加的一种方法中:
Method method = this.getClass().getMethod("onFinish", Object.class);
if (method.isAnnotationPresent( MyAnnot.class )){
//Do sth
}
我在 android 项目中使用它,在我的一台计算机上它工作正常,但第二个 isAnnotationPresent 总是返回 false。在这两种情况下,应用程序都是由 IntelliJ Idea 在同一部手机上运行的。
另外,如果我使用this.getClass().getMethod("onFinish", Drawable.class);,它适用于所有计算机。
【问题讨论】:
-
我会说这更多地指向类路径的问题,而不是编译器本身的问题。
-
嘿,我忘记了界面,不应该像我的项目中那样。公共类 Bar 和 FooBar 中的 @Aubin 不能有抽象方法,因为它们是已实现的类。 :)
-
我尝试编译你的代码。我有一些解释...等一下
-
我哪儿也不去,在我 GF 的电脑上安装 IDE 来检查一下。
标签: java android annotations