gpt4 book ai didi

java泛型类转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:59 25 4
gpt4 key购买 nike

你好,我有一个 HashMap ,其值为:

    private static final LinkedHashMap<Class<? extends Annotation> , Class<? extends AGenerator<?>>> annotationGeneratorMap = new LinkedHashMap<Class<? extends Annotation>, Class<? extends AGenerator<?>>>();

我的数字生成器看起来像:

public abstract class NumericGenerator<T extends Number> extends AGenerator<T>{


public NumericGenerator(Field field) {
super(field);
// TODO Auto-generated constructor stub
}

public T random() {
// TODO Auto-generated method stub
return null;
}

}

当我需要将此类放入 hashmap 时,我遇到了问题:

annotationGeneratorMap.put(GenerateNumeric.class, NumericGenerator.class);

并且在 eclipse 中我有错误方法不适用于参数 ???

但是:

        annotationGeneratorMap.put(GenerateNumeric.class, (Class<? extends AGenerator<?>>) NumericGenerator.class);

@SuppressWarnings("unchecked") 很好..:/

我可以不用类型转换就做这个吗?? (Class<? extends AGenerator<?>>) NumericGenerator.class

最佳答案

使用Class<? extends AGenerator>相反

LinkedHashMap<
Class<? extends Annotation>,
Class<? extends AGenerator> > annotationGeneratorMap = new LinkedHashMap<>()

在 Java 中,类可以表示原始类型,但不能表示泛型。

有一个类 List , 但没有 List<String> 的类.

所以你可以声明Class<? extends List> ,与 ArrayList.class 兼容等因为原始类型 ArrayListList 的子类型.

但是Class<? extends List<?>>没有多大意义,因为没有类是 List<?> 的子类型.

这一切都归功于删除。

关于java泛型类转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12467255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com