我现在很迷茫。我在另一个项目中使用以下代码没有任何问题:
public class ReadOnlyTable<T extends Model> implements ReadOnly<T> {
protected at.viswars.database.framework.core.DatabaseTable datasource;
private boolean debug = true;
protected ReadOnlyTable() {
initTable();
}
protected void reloadDataSource() {
initTable();
}
private void initTable() {
boolean readOnlyClass = false;
if (getClass().getSuperclass().equals(ReadOnlyTable.class)) readOnlyClass = true;
Class<T> dataClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
最后一行将毫无问题地运行。现在我做了第二个项目,因为我在阅读类(class)时遇到问题,所以我尝试做最简单的案例:
public class GenericObject<T> implements IGenericObject<T> {
public GenericObject() {
init();
}
private void init() {
Class<T> clazz = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
这个类在这里实例化:
GenericObject<String> go = new GenericObject<String>();
在我的第二个示例中,我将始终收到以下错误消息:
线程“main”中的异常 java.lang.ClassCastException: java.lang.Class 无法转换为 java.lang.reflect.ParameterizedType
我错过了什么??这让我发疯。感谢您的帮助!
最佳答案
无法检索 String
来自 go
.对象实例化表达式 ( new GenericObject<String>()
) 的类型参数在运行时的任何地方都不存在。这是类型删除。
当类 或接口(interface) 扩展或实现具有特定类型参数的另一个类或接口(interface)时,您尝试使用的技术会引起关注。例如class Something extends GenericObject<String>
.然后就有可能从类对象中得到这个声明信息。这与您正在做的事情完全无关。
关于java - 从泛型获取类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14789226/