Java 如何确保类注释参数在编译时扩展接口?

Java 如何确保类注释参数在编译时扩展接口?,java,annotations,Java,Annotations,我正试图定义一个注释,它采用类参数。我想确保提供的类扩展了一个特定的接口。所以我想出了 public @interface Tag { Class<? extends ITagStyle> style() default NoStyle.class } public class NoStyle implements ITagStyle { ... } public@interface标记{ Class这是有效的,因此您可能遗漏了一些明显的内容,或者您的错误与您向我们

我正试图定义一个注释,它采用类参数。我想确保提供的类扩展了一个特定的接口。所以我想出了

public @interface Tag {
    Class<? extends ITagStyle> style() default NoStyle.class
}
public class NoStyle implements ITagStyle {
    ...
}
public@interface标记{

Class这是有效的,因此您可能遗漏了一些明显的内容,或者您的错误与您向我们展示的内容无关:

public class Test {

    public interface ITagStyle {
    }

    public @interface Tag {
        Class<? extends ITagStyle> style() default NoStyle.class;
    }

    public class NoStyle implements ITagStyle {
    }

    public class SomeStyle implements ITagStyle {

    }

    @Tag(style = SomeStyle.class)
    public static void main(String[] args) {

    }
}
公共类测试{
公共接口ITagStyle{
}
public@interface标签{

ClassWorks为我工作。完整的错误消息是什么?错误:不兼容的类型。更具体地说,我使用的是jdk1.6.0_26…可能是一个bug?我使用的是1.6.0_29。你使用的是Eclipse吗?你的Java编译器符合性级别也设置为1.6吗?我使用的是JDeveloper 11.1.2.0.0,当前的编译器设置为javac。JDeveloper必须有bug在那里“进程中”javac编译器。我还安装了Java7U3,然后JDeveloper自动执行进程外操作,并且编译也很好。所以看起来我的代码是正确的,只是编译器有问题。