gpt4 book ai didi

java - 如何将 java.lang.Class 转换为 java.lang.class

转载 作者:可可西里 更新时间:2023-11-01 15:19:07 25 4
gpt4 key购买 nike

解决方案见底部。

我正在尝试编写一些通用处理代码,但在其中一个子类中,它需要一个更具体的类。

所以基类作为 Class 类型的字段,在子类中我试图将该 Class 对象转换为 Class 类型,它是 org. apache. hadoop. hbase. mapreduce.Mapper 的子类.

我从 Netbeans 收到以下错误:

"Incompatible types
required: java.lang.Class<org.apache.hadoop.hbase.mapreduce.TableMapper>
found: java.lang.class<capture#3 of ? extends org.apache.hadoop.mapreduce.Mapper>"

当我尝试下面的代码时

Class<TableMapper> tableMapperClass = null;
if( mapperClass.equals(TableMapper.class) ) {
tableMapperClass = TableMapper.class.asSubclass(mapperClass);

//do stuff
}

我得到:

incompatible types
required: java.lang.Class<org.apache.hadoop.hbase.mapreduce.TableMapper>
found: java.lang.Class<capture#8 of ? extends org.apache.hadoop.hbase.mapreduce.TableMapper>

对于

Class<TableMapper> tableMapperClass = null;
if( mapperClass.equals(TableMapper.class) ) {
tableMapperClass = mapperClass.asSubclass(TableMapper.class);

//do stuff
}

好的,从同事那里得到了答案,看起来应该可行:

Class<? extends TableMapper> tableMapperClass = null;
if( mapperClass.equals(TableMapper.class) ) {
tableMapperClass = mapperClass.asSubclass(TableMapper.class);

//do stuff
}

最佳答案

如果你想给 tableMapperClass 分配一个实际上是 TableMapper 的子类的类,那么你需要改变变量的类型。相反,使用:

Class<? extends TableMapper> tableMapperClass = null;

现在您可以将 TableMapper.class 或任何子类分配给此变量。当你写 Class<TableMapper>您 promise 该变量将完全是 TableMapper.class 或 null。

另一个例子:

Class<Number> number = Integer.class; // does not compile
Number number = new Integer(1); // compiles fine
Class<? extends Number> number = Integer.class; // also ok

请注意,您可以使用 Class<Number> 做不同的事情那么你可以用 Class<? extends Number> .例如,您可以调用 Class<Number> 的构造函数,因为你知道这个类(class)。你不能用 Class<? extends Number> 做到这一点因为构造函数不是在编译时定义的。

类似于,比如说,List<Number>对比List<? extends Number> .您可以在 List<Number> 类型的变量上调用 list.add(7) , 但你不能在 List<? extends Number> 上这样做因为你不知道第二个列表的类型。它可能是 List<Double>例如,在这种情况下不允许添加整数。

泛型很奇怪。 :) 希望这会有所帮助。

关于java - 如何将 java.lang.Class<Mapper> 转换为 java.lang.class<TableMapper>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7533511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com