有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从泛型获取类不起作用

我现在真的很困惑。我正在另一个项目中使用以下代码,没有任何问题:

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];

最后一行将毫无问题地运行。现在,我做了第二个项目,由于我在阅读课程时遇到了问题,我尝试做了最简单的案例:

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中出现异常。ClassCastException:java。类不能转换为java。朗。反思。参数化类型

我错过了什么??这让我发疯。感谢您的帮助


共 (2) 个答案

  1. # 1 楼答案

    无法从go检索String。对象实例化表达式(new GenericObject<String>())的类型参数在运行时的任何位置都不存在。这是类型擦除

    当一个接口扩展或实现另一个具有特定类型参数的类或接口时,您试图使用的技术会引起关注。e、 g.class Something extends GenericObject<String>。然后可以从类对象中获取此声明信息。这与你正在做的事情完全无关