代码之家  ›  专栏  ›  技术社区  ›  Aidenhjj

如何在java中包装泛型类

  •  1
  • Aidenhjj  · 技术社区  · 6 年前

    如果我正在为泛型类编写一个包装器,我已经尝试将类型嵌入at构造(如 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());
    

    有没有办法恢复中每个元素的类型 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;
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   user1983983    6 年前

    你只需要修改你的 FooWrapper#from 通过引入一个通用的:

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