java - 创建一个通用方法来处理 Collection Java 以更改 ArrayList 的内容

标签 java generics arraylist

我想创建一个通用方法,它可以采用 Integer、Float 或任何扩展 Number 的类型的 ArrayList。

public void mulBy2(ArrayList<? extends Number> list) {
// I want to multiply the value of each element in list by 2
// and store it back in list
for(int i = 0; i < al.size(); i++) {
  Double d =  al.get(i).doubleValue()*2;
  al.set(i,d); // Obvious error here says required ? extends Number
// how to solve this issue
}
}

如果列表是值为 [2,3,4] 的 ArrayList,我的方法应该返回或创建值为 [4,6,8] 的 arrayList 最初为 [1.2,3.4] 的 ArrayList 应转换为 [2.4,6.8]

最佳答案

我们不想做你的作业,但我认为应该回答这个问题,因为它对 future 的访问者可能有用。解决方案应包括以下内容:

  • 迭代元素
  • 获取class当前元素的
  • 调用class对应的方法当前元素的值来获取其值,因此如果它是 Integer , invoke intValue通过反射获取对象的值,将其乘以 2,并将列表中相应的元素设置为新值

有用的知识:

  1. 对应的方法有:intValue , longValue , floatValue , doubleValue , byteValueshortValue ,类的名称或多或少与它们相关,例如 Double , Float等等。参见这里:https://docs.oracle.com/javase/7/docs/api/java/lang/Number.html

  2. 您可以获得classObject通过调用其 getClass方法。它的名称可以通过调用结果 class 的 getEnwritingClass 来获得。 。示例:

Class<?> enclosingClass = getClass().getEnclosingClass(); if (enclosingClass != null) { System.out.println(enclosingClass.getName()); } else { System.out.println(getClass().getName()); }

  • 通过反射,您可以调用invoke来调用方法。示例:
  • Class<?> c = Class.forName("class name"); Method method = c.getDeclaredMethod("method name", parameterTypes); method.invoke(objectToInvokeOn, params);

    祝你好运!

    关于java - 创建一个通用方法来处理 Collection Java 以更改 ArrayList 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47819284/

    相关文章:

    java - 如何将对象 ArrayList 中的项目添加到 JList。

    java - 对我的 ArrayList 进行排序的正确方法是什么?

    java - 通用网址格式

    java - 在特殊情况下,Eclipse 无法生成 getter 和 setter;需要帮助追踪问题

    java - MVC 中通过线程从内部类调用外部类

    java - 在具有多种泛型类型的 Java 中实现抽象泛型方法

    java - 将 ArrayList 中的多个元素放入单个数组?

    java - 使用 Logger 的 info() 打印类名、方法名和行号

    Java:创建一个简单的通用方法以在应用过滤器后进行计数

    java - 泛型方法返回 'nothing'但不能返回null时返回什么?