相关疑难解决方法(0)

我为什么要关心Java没有具体化的泛型?

这是我最近在一次采访中提出的一个问题,即候选人希望看到添加到Java语言中的问题.它通常被认为是一种痛苦,Java没有具体化的仿制药,但是,当被推动时,候选人实际上无法告诉我他在那里可能取得的那些事情.

显然因为原始类型在Java中是允许的(以及不安全的检查),所以可以颠覆泛型并最终List<Integer>得到(例如)实际包含Strings.如果类型信息具体化,这显然是不可能的; 但必须有更多!

人们可以发布他们真正想要做的事情的例子,是否有可用的具体化的泛型?我的意思是,显然你可以List在运行时得到一个类型- 但是你会用它做什么?

public <T> void foo(List<T> l) {
   if (l.getGenericType() == Integer.class) {
       //yeah baby! err, what now?
Run Code Online (Sandbox Code Playgroud)

编辑:对此的快速更新,因为答案似乎主要是关注需要传入Class一个参数(例如EnumSet.noneOf(TimeUnit.class)).我正在寻找更多的东西,这是不可能的.例如:

List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();

if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
    l1.addAll(l2); //why on earth would I be doing this anyway?
Run Code Online (Sandbox Code Playgroud)

java generics reification

101
推荐指数
10
解决办法
1万
查看次数

我可以在Java中使用泛型类型调用.class吗?

我想知道Java中是否有办法做类似的事情

Class c = List<String>.class;
Class c2 = List<Date>.class;
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西来创建一个存储类名(带有泛型类型)的地图和我以后可以查找的相应对象.例如,

Map<Class, Object> dataMap = new HashMap<Class, Object>();
dataMap.put(c, listOfStrings);
dataMap.put(c2, listOfDates);
Run Code Online (Sandbox Code Playgroud)

这是不可能的,因为运行期间的类型擦除?

java generics

12
推荐指数
2
解决办法
9210
查看次数

如何获取参数化的Class实例

由于引入了泛型,因此Class被参数化,因此List.class生成Class <List>.这很清楚.

我无法弄清楚的是如何获得一个自身参数化的类型的实例,即Class <List <String >>.就像在这个片段中:

public class GenTest {
    static <T> T instantiate(Class<T> clazz) throws Exception {
        return clazz.newInstance();
    }
    public static void main(String[] args) throws Exception {
        // Is there a way to avoid waring on the line below
        // without using  @SuppressWarnings("unchecked")?
        // ArrayList.class is Class<ArrayList>, but I would like to
        // pass in Class<ArrayList<String>>
        ArrayList<String> l = GenTest.instantiate(ArrayList.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

我经常遇到这个问题的变化,我仍然不知道,如果我只是错过了什么,或者是否真的没有更好的方法.谢谢你的建议.

java generics

9
推荐指数
1
解决办法
4798
查看次数

Java Generics Pass .class参考

我需要调用一个超级构造函数,它要求我传递.class泛型类型的引用.我怎样才能用Java实现这一目标?

构造函数想拥有..

Class<List<MyType>>
Run Code Online (Sandbox Code Playgroud)

由于泛型在运行时被擦除,我不知道如何满足构造函数.

List<MyType>.class // does not work ;-)
Run Code Online (Sandbox Code Playgroud)

java generics

8
推荐指数
1
解决办法
4970
查看次数

如何在Java中声明一个Typed类?

我需要声明一个实例Map.class,但Map是键入的......所以我需要这样的东西:

Class <Map<String, String>> clazz = Map.class;
Run Code Online (Sandbox Code Playgroud)

此行导致编译错误.表达这个的干净方式是什么?

java generics

8
推荐指数
1
解决办法
234
查看次数

标签 统计

generics ×5

java ×5

reification ×1