为什么 Java 泛型方法参数 类 需要转换

Why do Java Generic Method Argument Classes Need to be Cast

我有一个通用方法:

public <T> boolean saveRow(T row, Class<T> rowClass) {
    Mapper<T> rowMapper = mappingManager.mapper(rowClass);
    rowMapper.save(row);

    return true;
}

我想放弃第二个参数,因为我可以从 row.getClass().

推断出 rowClass

我注意到完成这项工作的唯一方法是将 row.getClass() 转换为 (Class<T>) row.getClass():

public <T> boolean saveRow(T row) {
    Mapper<T> rowMapper = mappingManager.mapper((Class<T>) row.getClass());
    rowMapper.save(row);

    return true;
}

为什么需要强制转换?

谢谢!

因为Class.getClass()不知道泛型。
Class<?> 无法替代 Class<T>.

看签名:

public final native Class<?> getClass();