我知道我正在嘗試做的事情對於純java來說並不是真的可行 - 只有當我查看調試信息時纔有可能。無論如何我都不會編譯,因爲我的spring mvc會停止工作。如何確定泛型超類的特定子類的ACTUAL返回類型?
這麼說,我有以下情況:
一個通用超:
包com.cinefms.apitester.springmvc.crawlers;
public class TestGenerics<T extends TestGenericsInterface> {
public T get() {
return null;
}
public T put(T t) {
return null;
}
}
和它的子類:
package com.cinefms.apitester.springmvc.crawlers;
public class TestGenericsSub extends TestGenerics<TestGenericsImpl> {
}
在那裏是真該死簡單的對象。
接口:
package com.cinefms.apitester.springmvc.crawlers;
public interface TestGenericsInterface {
}
和它的實現:
package com.cinefms.apitester.springmvc.crawlers;
public class TestGenericsImpl implements TestGenericsInterface {
}
日食是完全沒有搞清楚是的TestGenericsSub.get()
應返回的TestGenericsImpl
實例......即使沒有源可用。
但我怎麼可能在運行時自己弄清楚這一點?
如果 「M」 是方法 「運行」,然後
m.getGenericReturnType();
將返回 「T」(沒有用),而:
m.getReturnType();
給我 「TestGenericsInterface」(也未有用)。我一直在看「org.javaruntype」庫...但我似乎無法弄清楚。
有人可以解釋嗎?
謝謝!
你不能,在一般情況下,判斷ACTUAL返回類型的方法,而不檢查方法中的代碼(通用與否)。最好你可以確定方法聲明中指定的FORMAL返回類型(使用適當的泛型swizzle),但該方法總是可以返回該類型的子類。 – 2014-12-04 20:29:06