我知道我正在尝试做的事情对于纯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