我正在尝试获得解决方案以实现以下目标:
public final static <T> Class<Set<T>> getSetClass(Class<T> cls) {
...
}
其中cls
例如String.class
,然后该方法返回Class<Set<String>>
对象。但当然,由于cls
是可变的,它也可以获得Boolean.class
然后返回Class<Set<Boolean>>
个对象。
我怎样才能做到这一点?
答案 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) {
...
}