我知道有很多关于类似问题的问题,但我没有找到直接解决这个问题的问题。
以下是我试图实现的代码的框架:
class MyObj<T> {
// Internals are unimportant ...
}
private <T> void foo(T arg) {
Class<MyObj<T>> clazz = // What do I write here?
// Here is one thing that works, but is quite ugly:
@SuppressWarnings("unchecked")
clazz = (Class<MyObj<T>>)(new MyObj<T>().getClass())
// ...
// Later, clazz is passed to a constructor of some other class
OtherClass<MyObj<T>> foo = new OtherClass<>(clazz);
}
问题1:有没有人有更好的建议如何填充clazz
?理想情况下,它会避免调用new
。
问题2:鉴于上面的丑陋(但工作)代码,是否有任何可能会破坏的情况?我不喜欢@SuppressWarnings
,并担心我可能隐藏的问题。
答案 0 :(得分:3)
为避免实例化,您可以写:
Class<MyObj<T>> clazz = (Class) MyObj.class;
由于擦除,Class
存在一个MyObj
实例,无论它可能具有什么类型参数,因此虽然这很难看,但它是安全的。