java - 从泛型获取类不起作用

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

最后一行将毫无问题地运行。现在我做了第二个项目,因为我在阅读类(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/

相关文章:

Java 泛型 : Warning needs a unchecked cast to conform to <InterfaceName>

c# - 必须实现通用的小于和大于操作

java - 在不对返回类型进行类型转换的情况下调用工厂

java - 创建一个可以充当另一个类的类

java - Hibernate 和 PostgreSQL - 检查 setParameterList 中传递的集合是否为空

java - 从 Eclipse 实例运行 Sonar 代码分析

java - 在没有方法的情况下按顺序打印数组

c# - 在 native C++ 代码中使用 ICollection 接口(interface)

java - 为什么我的构造函数参数没有传递?

java - 如何减少泛型<?将 Type> 扩展为 Java 中的 Type。代码在运行时有效但无法编译