gpt4 book ai didi

java - 传递类型参数的类,该类型参数本身可以在 Java 中参数化

转载 作者:行者123 更新时间:2023-12-01 19:07:46 26 4
gpt4 key购买 nike

我有以下类,它在其构造函数中传递其类型的类:

class Foo<T>{
Foo(Class<T> clazz){
//do something
}
}

我的问题是,如果我希望 T 是泛型类型,则除非使用原始类型,否则我无法将其类作为参数传递:

Foo<List> f = new Foo(List.class);

编译没问题,但是我如何更改构造函数才能实例化 Foo<List<Integer>> 类型的对象?

Foo<List<Integer>> f1 = new Foo(List.class);

不起作用,因为 List != List<Integer>我做不到List<Integer>.class因为类型删除。我现在正在做的是进行未经检查的转换,但必须有更好的方法:

Foo<List<Integer>> f2 = (Foo<List<Integer>>)new Foo(List.class);

我想用它来方便地封装通过反射的字段访问。这是我如何使用它的示例:

class StaticField<V> {
private final Field field;
StaticField(Class<?> declaringClass, String fieldName, Class<V> valueClass){
//instantiate field and do some error handling including an
//assertion whether field.getType() == valueClass
}
public V get(){...}
public void set(V value){...}
}

最佳答案

说实话,没有真正的方法可以做到你想要的,因为在运行时,虚拟机无法访问避免类型删除所需的信息 - 这会阻止你类从具有返回相应类的信息,因此它最多只能返回您提供的相同类参数。

关于java - 传递类型参数的类,该类型参数本身可以在 Java 中参数化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515875/

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