也许以前已经回答过,但我没有在这里找到它。请考虑以下代码行:
public static <T> T getAs() { ... }
可以通过反射获得对象Class<T>
吗?
为了澄清,我不会查看类的泛型类型,例如
class Foo<T> {
public T get() { ...}
}
这可以在c#中完成,因为它非常方便,例如
class Foo {
private List<A> items;
public <T extends A> T first() {
Class<T> clazz = //Magic??
foreach (A a : items) {
if (clazz.isInstance(a)) return (T)a;
}
return null;
}
}
像这样使用:
SubClass s = fooInst.<SubClass>first();
答案 0 :(得分:0)
有时,即使在编译之后,确实可以获得泛型类型信息。理论上,这甚至可以用于泛型方法调用。剧透,这是一个坏主意。出于学术原因,让我们考虑如何做到这一点:
T
相同的类型。T
找到的名称加载课程。这当然不会很好用,如果在源代码中明确指定了T
的类型,它就会被破坏。并且您不希望这样做,因为您的方法调用会突然需要IO。
你可能想要的是返回:
<T> T getAs(Class<? extends T> type) { ... }
在这种情况下,您需要用户为您提供所需类型,但您需要以类型安全的方式执行此操作。