【发布时间】:2014-09-24 01:48:30
【问题描述】:
我知道已经有很多关于类似问题的问题,但我还没有找到直接解决这个问题的问题。
这是我尝试实现的代码框架:
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,担心我可能隐藏的问题。
【问题讨论】:
-
由于擦除,
Class<MyObj<T>>将只绑定到任何Object。改用Class<?>可能会更好;这样,您也可以通过arg.getClass()从arg中提取课程信息。 -
你想用
clazz做什么? -
@TedHopp clazz,在我的例子中,被传递到另一个泛型层。它将被传递给另一个类构造函数,该构造函数在内部使用该 Class
来实例化等。我将更新问题以反映这一点。 -
@Makoto:如果我理解正确,我不能使用
arg.getClass(),因为这会给我一个Class<T>,而我想要一个Class<MyObj<T>>。