java - 如何在 java 中包装泛型类

标签 java generics

如果我正在为泛型类编写包装器,我试图将类型嵌入到构造中(如 this SO question 中):

class Foo<T> {
    private T value;
    private Class<T> type;

    public Foo(Class<T> type, T value) {
        this.value = value;
        this.type = type;
    }

    public T getValue() {
        return value;
    }

    public Class<T> getType() {
        return type;
    }
}

我有一个 Foo 的实例列表,我想将其转换为 FooWrapper 的列表,按照这些行:

List<Foo<?>> someListOfFoos = ...
List<FooWrapper<?>> fooWrappers = someListOfFoos
    .stream()
    .map(foo -> FooWrapper.from(foo))
    .collect(Collectors.toList());

在构建每个 FooWrapper 时,有什么方法可以恢复 someListOfFoos 中每个元素的类型吗?沿着这些线的东西:

class FooWrapper<T> {
    private Foo<T> foo;

    public static FooWrapper<?> from(Foo<?> toWrap) {
        Class<E> type = toWrap.getType(); // i know this is wrong
        return new FooWrapper<type>(toWrap); // this is very wrong
    }

    private FooWrapper(Foo<T> foo) {
        this.foo = foo;
    }
}

最佳答案

您只需稍微修改您的FooWrapper#from,引入一个泛型:

public static <E> FooWrapper<E> from(Foo<E> toWrap) {
    return new FooWrapper<E>(toWrap);
}

关于java - 如何在 java 中包装泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53170129/

相关文章:

c# - 通用类型的多个位置

Java:使用多个线程同时在 JPanel 上绘制

java - 如何比较2个List<Entity>?

java - 如何将 HSSFWorkbook 转换为 CSV 文件..?

c# - 无法实例化泛型类

java - Java 中的通用工厂方法

java - 持久化动态属性和查询

java - 提交或 conn.setAutoCommit(true)

swift - 如何创建一个快速的通用可变参数函数?

c# - 从 C# 通用字典中过滤掉值