基于变量泛型类获取类

时间:2016-09-06 14:05:11

标签: java

我正在尝试获得解决方案以实现以下目标:

public final static <T> Class<Set<T>> getSetClass(Class<T> cls) {
    ...
}

其中cls例如String.class,然后该方法返回Class<Set<String>>对象。但当然,由于cls是可变的,它也可以获得Boolean.class然后返回Class<Set<Boolean>>个对象。

我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:2)

这对我有用:

@SuppressWarnings("unchecked") 
public <T> Class<Set<T>> getSetClass(Class<T> cls) { 
  Set<T> set = new HashSet<>(); 
  return (Class<Set<T>>) set.getClass();
}

嗯,它编译;解决你的“真实”问题是多么有用;我还不知道。显然;那里的 cls 参数未被使用。

但它有所作为:

@Test
public void test() {
    Class<Set<Integer>> setClass = new PartitionPropertiesTest().getSetClass(Integer.class);
    System.out.println("whatever: " + setClass);
}

打印:

whatever: class java.util.HashSet

答案 1 :(得分:0)

没有Class<Set<String>>个对象。

通用类型在运行时被擦除,因此只有Class<Set>的实例(即Set<?>.class)由所有Class<Set<?>>共享。无法从此对象返回String

出于这个原因,your JSON library has a TypeRef class捕获泛型类型信息。您只需使用它而不是Class

答案 2 :(得分:-1)

您的意思是,如何定义返回类型取决于参数类型?

试试这个:

public final static <T> Class<Set<T>> getSetClass(Class<T> cls) {
    ...
}