【问题标题】:Generic type as parameter in Java Method泛型类型作为 Java 方法中的参数
【发布时间】:2011-07-20 16:11:02
【问题描述】:

你认为有可能创造出类似的东西吗?

private ArrayList increaseSizeArray(ArrayList array_test, GenericClass) {
    array_test.add(new GenericObject()); // instance of GenericClass
    return array_test;
}

【问题讨论】:

    标签: java generics methods


    【解决方案1】:

    是的,你可以。

    private static <T> List<T> pushBack(List<T> list, Class<T> typeKey) throws Exception {
        list.add(typeKey.getConstructor().newInstance());
        return list;
    }
    

    使用示例:

    List<String> strings = new ArrayList<String>();
    pushBack(strings, String.class);
    

    【讨论】:

    • 你怎么称呼那个方法?我不知道 Class 类型键应该是什么。我找不到任何关于它的信息。如果您有任何阅读建议,将受到欢迎。感谢您的回复!
    • @Pierre:刚刚添加了一个使用示例。基本上,如果你取一个类名(在这种情况下为String)并在其后添加.class,你就有了该类的类型键(类对象)。 String.class 的类型为 Class&lt;String&gt;
    • 我只是这样使用它: static List pushBack(List list, Class typeKey, int size) 并且它起作用了。谢谢你,你帮了我很多。避免复制/粘贴代码总是一种乐趣。
    • 为什么在返回类型之前使用 ?我也在做同样的事情,但我想知道 的实际用法。提前致谢。
    • docs.oracle.com/javase/tutorial/extra/generics/methods.html 介绍static &lt;T&gt; void method(...)的构造
    【解决方案2】:

    老问题,但我想这是在 java8+ 中的首选方式

    public <T> ArrayList<T> dynamicAdd(ArrayList<T> list, Supplier<T> supplier) {
      list.add(supplier.get());
      return list;
    }
    

    它可以这样使用:

    AtomicInteger counter = ...;
    ArrayList<Integer> list = ...;
    
    dynamicAdd(list, counter::incrementAndGet);
    

    这将向列表中添加一个数字,从 AtomicInteger 的 incrementAndGet 方法中获取值

    也可以像这样使用构造函数作为方法引用:MyType::new

    【讨论】:

      【解决方案3】:

      简单的解决方案!

      private <GenericType> ArrayList increaseSizeArray(ArrayList array_test, GenericType genericObject)
      {
          array_test.add(new genericObject());
          return ArrayList;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多