gpt4 book ai didi

java - 具有作为构造函数参数传递的通用基类的枚举

转载 作者:行者123 更新时间:2023-12-04 14:01:25 28 4
gpt4 key购买 nike

我正在尝试创建一个枚举,它的构造函数接受一个基类是泛型类的对象。

我似乎无法从 enum 中获取底层泛型类型,但是返回的是 Object 而不是 T

有办法吗?

abstract public class Field<T> {
abstract public T get();
}

public class IntegerField extends Field<Integer> {
public Integer get() {
return 5;
}
}

public class StringField extends Field<String> {
public String get() {
return "5";
}
}

public enum Fields {
INTEGER (new IntegerField()),
STRING (new StringField());

private final Field<?> field; // <<--- I can't have Field<T>, enum's can't be generic. :(

<T> Fields(Field<T> field) {
this.field = field;
}

public <T> T get() {
return field.get(); // <<--- Returns Object, not T
}
}

最佳答案

问题是枚举不能被通用类型化,所以即使你强制转换 get 调用 ((T) field.get()) 你也不会有类型安全,因为它会同意使用任何赋值(例如,您可以成功编译它:boolean b = Fields.INTEGER.get())。

只需使用常量即可:

public final class Fields {
public static final Field<Integer> INTEGER = new IntegerField();
public static final Field<String> STRING = new StringField();
}

关于java - 具有作为构造函数参数传递的通用基类的枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69949633/

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