gpt4 book ai didi

java - 在 java 中使用未指定的通用通配符

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:36:26 24 4
gpt4 key购买 nike

我希望用 Java 实现一个模块化的通用对象工厂。

我的代码将包含三个基本元素:

  1. 一个 DataLoader,它将提供一个通用的 Collection
  2. 一个工厂,给定一个元素 T,返回一个 U 类型的对象
  3. 将两者联系在一起并提供集合的类

我苦苦挣扎的一点是类 3 不关心类型 T。重要的是工厂和 DataLoader 使用相同的 T - 即 DataLoader 提供的原始数据应该可供构建器使用来构建第三类提供的对象 - 但第三类不关心中间格式是什么。

那么,如果 1 和 2 的泛型类型 T 不是 3 的规范的一部分,我该如何强制该泛型类型 T 相同?

最佳答案

一个选择是使用一个带有两个类型参数的帮助器类将数据加载器和工厂绑定(bind)在一起,然后将该帮助器包装在另一个不关心原始数据加载器类型的类中:

public class DataLoader<T> {
...
}

public class Factory<T, U> {
...
}

public class Binder<T, U> {
public Binder(DataLoader<T> dataLoader, Factory<T, U> factory) {
...
}
}

public class ClassNumber3<U> {
public ClassNumber3(Binder<?, U> binder) {
...
}
}

您甚至可以通过为 ClassNumber3 提供通用构造函数来从外部代码中隐藏 Binder 的存在:

public class ClassNumber3<U> {
Binder<?, U> binder;
public <T> ClassNumber3(DataLoader<T> dataLoader, Factory<T, U> factory) {
binder = new Binder<T, U>(dataLoader, factory);
...
}
}

关于java - 在 java 中使用未指定的通用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7360209/

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