我瀏覽過StackOverflow以找到我面臨的問題的答案。我遇到了很多很好的答案,但仍然沒有回答我的問題。泛型作爲方法返回類型
Get type of a generic parameter in Java with reflection
How to find the parameterized type of the return type through inspection?
Java generics: get class of generic method's return type
http://qussay.com/2013/09/28/handling-java-generic-types-with-reflection/
http://gafter.blogspot.com/search?q=super+type+token
所以這是我想做的事情。 使用反射,我想獲得所有的方法和它的返回類型(非泛型)。 我一直在使用Introspector.getBeanInfo
這樣做。然而,當我遇到返回類型未知的方法時,我遇到了限制。
public class Foo {
public String name;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
public class Bar<T> {
T object;
public T getObject() {
return object;
}
public void setObject(final T object) {
this.object = object;
}
}
@Test
public void testFooBar() throws NoSuchMethodException, SecurityException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Foo foo = new Foo();
Bar<Foo> bar = new Bar<Foo>();
bar.setObject(foo);
Method mRead = bar.getClass().getMethod("getObject", null);
System.out.println(Foo.class);// Foo
System.out.println(foo.getClass());// Foo
System.out.println(Bar.class);// Bar
System.out.println(bar.getClass());// Bar
System.out.println(mRead.getReturnType()); // java.lang.Object
System.out.println(mRead.getGenericReturnType());// T
System.out.println(mRead.getGenericReturnType());// T
System.out.println(mRead.invoke(bar, null).getClass());// Foo
}
如何知道返回類型T
是否爲泛型? 我沒有奢望在運行時擁有一個對象。 我正在試用Google TypeToken
或者使用抽象類來獲取類型信息。 我想聯想T
到Foo
爲getObject
方法爲Bar<Foo>
對象。
有人認爲java不保留通用信息。在那種情況下,爲什麼第一次鑄造工作,第二次鑄造沒有。
Object fooObject = new Foo();
bar.setObject((Foo) fooObject); //This works
Object object = 12;
bar.setObject((Foo) object); //This throws casting error
任何幫助表示讚賞。
您明白編譯器會丟棄所有類型參數,對不對?在運行時,一個「Bar」只是一個「Bar」。 –
是的,我知道。有沒有辦法獲得我正在尋找的信息使用'TypeToken'或類似的方法來獲得'getObject'方法的實際返回類型? –
@JigarPatel。所以不,你不明白大衛說什麼。 –