代码之家  ›  专栏  ›  技术社区  ›  Fernando Martín Besteiro

创建变量中定义的类的ArrayList

  •  1
  • Fernando Martín Besteiro  · 技术社区  · 6 年前

    假设我有这样的东西

    Class klazz = Integer.class;
    

    我有兴趣做这样的事

    List<(klazz Class)> something = new ArrayList<>();
    
    something.add(new Integer(..))
    something.add(new Integer(..))
    .. etc
    

    我可能需要使用反射,但是,我不确定如何应用它。

    有没有可能不反射?如果不是,您如何发现它适合于实现?

    提前谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   J-Alex Dorota Przeniosło    6 年前

    我不能完全接受这一要求,但这可能有助于:

    public class Main {
        public static void main(String[] args) {
            ContainerWrapper<Integer> containerWrapper = new ContainerWrapper<>(Integer.class);
            containerWrapper.add(1);
            System.out.println(containerWrapper.containerType());
            System.out.println(containerWrapper.isInteger());
        }
    }
    
    class ContainerWrapper<T> {
        // Store type information here
        private Class<T> clazz;
        private List<T> list = new ArrayList<>();
    
        public ContainerWrapper(Class<T> clazz) {
            this.clazz = clazz;
        }
    
        public void add(T element) {
            list.add(element);
        }
    
        public Class<T> containerType() {
            return clazz;
        }
    
        public boolean isInteger() {
            return clazz.isAssignableFrom(Integer.class);
        }
    }
    

    你可以查一下 T 键入使用 clazz.isAssignableFrom(*.class)

    输出:

    class java.lang.Integer
    true