从泛型中获取类不起作用

Ray*_*n78 2 java generics

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

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];
Run Code Online (Sandbox Code Playgroud)

最后一行将毫无问题地运行。现在我做了第二个项目,由于我在读出类时遇到问题,我尝试做最简单的情况:

public class GenericObject<T> implements IGenericObject<T> {
public GenericObject() {
    init();
}

private void init() {
    Class<T> clazz = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
Run Code Online (Sandbox Code Playgroud)

}

这个类在这里实例化:

        GenericObject<String> go = new GenericObject<String>();
Run Code Online (Sandbox Code Playgroud)

在我的第二个示例中,我总是会收到以下错误消息:

线程“main”中的异常 java.lang.ClassCastException:java.lang.Class 无法转换为 java.lang.reflect.ParameterizedType

我缺少什么?这让我发疯。任何帮助表示赞赏!

new*_*cct 5

String从 中检索是不可能的go。对象实例化表达式 ( new GenericObject<String>()) 的类型参数在运行时不存在于任何地方。这是类型擦除。

您尝试使用的技术涉及一个接口扩展或实现具有特定类型参数的另一个类或接口的情况。例如class Something extends GenericObject<String>。然后就可以从类对象中获取这个声明信息了。这与你正在做的事情完全无关。