java正在创建泛型类型的对象
好的,这是我在这里的第一篇帖子,所以请容忍我。。 我正在做一个关于基因编程的小项目,我正在使用泛型
以下是一些小代码片段:
public class BinaryGenome<C extends BinaryEncodeable<C>> {
public BinaryGenome(C encodable){
setGenome(encodable.encode());
setSpecification(encodable);
}
public BinaryGenome(BitSet encoding) {
setGenome(encoding);
//What comes here???
}
}
public interface BinaryEncodeable<C extends BinaryEncodeable<C>> {
public BitSet encode();
public C decode(BitSet encoding);
}
二进制基因组表示一个基因组,它包含它表示的对象和位表示。我可以使用第一个构造函数,但第二个构造函数有问题。如果实现BinaryEncodable的每个类都有一个解码方法,那么是否可以从编码在第二个构造函数中创建对象C
我知道“new C()”由于类型错误而无法工作,但是否有某种工厂可以使用
# 1 楼答案
你可以通过一个供应商作为论据:
但实际上,
decode
方法作为SomeClass
上的静态工厂方法更好这两种情况都要求您知道特定的子类型
第二个参数甚至可以让您摆脱类型参数
BinaryGenome
不能只构造类型为C
的对象的原因是缺乏信息在运行时,由于擦除,类型
BinaryGenome
只知道BinaryEncodable
,而BinaryEncodable
对它自己的子类一无所知如果没有保存此类信息的
C
实例,BinaryGenome
就无法知道调用什么decode
方法