java - 从注解引用参数化类型

标签 java generics annotations

我想弄清楚如何将参数化接口(interface)引用为注释属性:

public class Example {
    public interface MyService<T extends Number> {
        T someNumber();
    }

    public class BaseServiceImpl<T extends Number> implements MyService<T> {
        @Override
        public T someNumber() {
            return null;
        }
    }

    public @interface ServiceType {
        Class<? extends MyService<?>> value();
    }

    @ServiceType(BaseServiceImpl.class)
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

上述代码因 @ServiceType 注释类型不匹配而失败。我认为问题在于我为 value 属性指定的范围。我还注意到,当一个类型不是泛型时,它工作正常;例如@ServiceType(IntegerService.class) 给定的工作:

    public class IntegerService extends BaseServiceImpl<Integer> { /* ... */ }

在尝试提供通用类型时,我缺少什么来消除不匹配错误?

最佳答案

问题是类字面量指的是原始类类型。即BaseServiceImpl.class类型为 Class<BaseServiceImpl> , 不是 Class<BaseServiceImpl<? extends Number>> .将值的返回类型改为Class<? extends MyService>它应该编译。

关于java - 从注解引用参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972862/

相关文章:

java - JBoss EJB2 计时器服务 - 多台服务器,单个 TIMERS 表?

java - 如何使用Java泛型方法?

annotations - matplotlib的同一个注释中的不同字体大小?

java - 检索 Jaxb 转换的 Enum 类中的 @XmlEnumValue 注释属性值

Java - boolean 逻辑 - 无法识别对象

java - XSRFTokenUtility 中的 NPE - Google 移动后端启动器

java - Android - 如何将文档打包到应用程序中

C#:泛型方法不调用特定方法重载

scala - 变换/遍历 Shapeless 的 HMap

java - 如何告诉 Hibernate 注解 @Column 区分大小写?