创建通用类型的对象

马蒂亚斯·德沙勒罗伊

好的,这是我在这里的第一篇文章,所以请耐心等待。.我正在做一个关于基因编程的小型项目,正在使用泛型。

这些是小的代码段:

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);

}

BinaryGenome代表一个基因组,它包含它代表的对象和位表示。我可以使用第一个构造函数,但是第二个构造函数却遇到了麻烦。假设每个实现BinaryEncodable的类都有一个解码方法,是否有可能通过编码在第二个构造函数中创建对象C。

我知道“ new C()”由于类型错误而不起作用,但是我可以使用某种工厂吗?

乔恩·韦尔尼

您可以将供应商作为参数传递:

public BinaryGenome(BitSet encoding, Supplier<C> supp) {
    setGenome(encoding);
    C c = supp.get();
    //...
}
BinaryGenome<SomeClass> bg = new BinaryGenome<>(encoding, SomeClass::new);

但实际上,该decode方法作为上的静态工厂方法更好SomeClass

class SomeClass implements BinaryEncodeable<SomeClass> {
    public static SomeClass decode(BitSet encoding) {...}
}
BinaryGenome<SomeClass> bg = new BinaryGenome<>(SomeClass.decode(encoding));

两种情况都要求您始终知道特定的子类型。

第二个甚至允许您摆脱type参数。


BinaryGenome不能仅仅构造type对象的原因C是缺乏信息。

在运行时,由于擦除,唯一的类型BinaryGenome知道是,BinaryEncodableBinaryEncodable对其自身的子类一无所知。

如果没有C此类的实例保存此类信息,则无法BinaryGenome知道decode要调用的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建通用类型的对象

来自分类Dev

根据通用类型创建新对象

来自分类Dev

如何在Scala中创建通用类型的对象/单例?

来自分类Dev

是否可以在TypeScript中创建通用的映射对象类型?

来自分类Dev

添加通用类型对象

来自分类Dev

创建一个接受类型对象的通用方法并返回一个新的类型对象

来自分类Dev

使用FakeItEasy,可以创建带有通用类型参数的类型的虚拟对象

来自分类Dev

对象值参数的通用类型

来自分类Dev

对象值参数的通用类型

来自分类Dev

Java创建通用对象的映射

来自分类Dev

无法模拟通用对象创建

来自分类Dev

打字稿创建通用对象

来自分类Dev

DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

来自分类Dev

使用通用类型接口创建对象实例时发生编译错误

来自分类Dev

DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

来自分类Dev

从对象列表创建运行时已知类型的列表并调用通用方法

来自分类Dev

创建接受具有自定义对象类型的 List 并访问类似属性的通用方法

来自分类Dev

创建对象类型的变量

来自分类Dev

打字稿,类型对象不是通用的

来自分类Dev

调用动态类型的对象的通用方法

来自分类Dev

使用通配符返回通用类型对象的列表

来自分类Dev

映射不同类型对象的通用方法

来自分类Dev

通用Swift函数测试对象类型

来自分类Dev

Java对象返回类型与通用方法

来自分类Dev

获取通用对象成员的编译时间类型

来自分类Dev

对象转换中的通用返回类型

来自分类Dev

使用通用类型对象的反射获取属性

来自分类Dev

Java通用类型和对象类

来自分类Dev

如何从类对象获取(通用)类型

Related 相关文章

  1. 1

    创建通用类型的对象

  2. 2

    根据通用类型创建新对象

  3. 3

    如何在Scala中创建通用类型的对象/单例?

  4. 4

    是否可以在TypeScript中创建通用的映射对象类型?

  5. 5

    添加通用类型对象

  6. 6

    创建一个接受类型对象的通用方法并返回一个新的类型对象

  7. 7

    使用FakeItEasy,可以创建带有通用类型参数的类型的虚拟对象

  8. 8

    对象值参数的通用类型

  9. 9

    对象值参数的通用类型

  10. 10

    Java创建通用对象的映射

  11. 11

    无法模拟通用对象创建

  12. 12

    打字稿创建通用对象

  13. 13

    DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

  14. 14

    使用通用类型接口创建对象实例时发生编译错误

  15. 15

    DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

  16. 16

    从对象列表创建运行时已知类型的列表并调用通用方法

  17. 17

    创建接受具有自定义对象类型的 List 并访问类似属性的通用方法

  18. 18

    创建对象类型的变量

  19. 19

    打字稿,类型对象不是通用的

  20. 20

    调用动态类型的对象的通用方法

  21. 21

    使用通配符返回通用类型对象的列表

  22. 22

    映射不同类型对象的通用方法

  23. 23

    通用Swift函数测试对象类型

  24. 24

    Java对象返回类型与通用方法

  25. 25

    获取通用对象成员的编译时间类型

  26. 26

    对象转换中的通用返回类型

  27. 27

    使用通用类型对象的反射获取属性

  28. 28

    Java通用类型和对象类

  29. 29

    如何从类对象获取(通用)类型

热门标签

归档