我知道有很多關於類似問題的問題,但我還沒有找到一個直接解決這個問題。獲得類<Foo<T>>在運行時給定泛型類型輸入
這裏是代碼的骨架,我想實現:
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(http://stackoverflow.com/questions/17634631/how-to-access-the-class-from-a-class-with -a-generic) – rgettman 2014-09-23 17:23:10
由於擦除,'類>'將被綁定到任何「對象」。取而代之的是使用'類>'可能會更好。這樣,你也可以通過'arg.getClass()'從'arg'中提取類信息。 –
Makoto
2014-09-23 17:23:18
你想用'clazz'做什麼? – 2014-09-23 17:23:21