java—在方法中实现泛型的最佳方法?

92vpleto  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(378)

我在一个编程练习中遇到了问题,因为我正在读的书只展示了如何使用print泛型方法。这很简单。但是这个练习要求找到arraylist的最大值和最小值。我找到了一种方法,在我的代码中展示了,但我只是在想,首先使用泛型有什么意义?
以下是练习说明:
用类型参数t编写一个名为mylist的泛型类。类型参数t应该被约束到一个上限:number类。类应该有一个t的arraylist作为字段。编写一个名为add的公共方法,该方法接受类型为t的参数。当参数被传递给方法时,它会被添加到arraylist中。编写另外两个方法,最大值和最小值,返回arraylist中的最大值和最小值。
我的代码:

//Main

import java.io.*;
import java.util.*; 

public class Main {

    static PrintWriter writer = new PrintWriter(System.out, true);

    public static void main(String[] args) throws IOException {

        ArrayList<Integer> list = new ArrayList<>();

        MyList<Integer> myList = new MyList<>(list);

        myList.add(3);
        myList.add(5);
        myList.add(44);
        myList.add(654);

        int first = myList.getArrayList().get(0);
        int largest = 0;
        int smallest = 0;

        for (int i = 1; i < list.size(); i++) {
            largest = myList.getLargest(first, myList.getArrayList().get(i));
            smallest = myList.getSmallest(first, myList.getArrayList().get(i));
        }

        System.out.println("Largest: " + largest + "\nSmallest: " + smallest);

    }
}

//MyList Class

import java.util.ArrayList;

public class MyList <T extends Number> {
    private ArrayList<T> arrayList;

    public MyList(ArrayList<T> arrayList) {
        this.arrayList = arrayList;
    }

    public void add(T item) {
        arrayList.add(item);
    }

    public ArrayList<T> getArrayList() {
        return arrayList;
    }

    public int getLargest(int x, int y) {
        return Math.max(x, y);
    }

    public int getSmallest(int x, int y) {
        return Math.min(x, y);
    }
}

如果我尝试用t类型编写方法,那么在使用>或+之类的运算符和math.max()时就会出错。我明白为什么现在,我只是不明白我应该返回什么类型的方法和输入。int、integer或t?如果我想使用一个使用doubles的arraylist,那么怎样才能使方法同时处理这两种类型呢?任何关于使用泛型解决这个问题的最佳方法的意见都将受到极大的赞赏。谢谢您。

zdwk9cvp

zdwk9cvp1#

我不会帮你做作业,但我可以让你走上正轨。。。
1-我会在同一行中定义我的arraylist并初始化它(不需要用户在构造函数中提供一个)。

public class MyList<T extends Number> {
  private ArrayList<T> arrayList = new ArrayList<T>();

2-定义返回t的两个方法

public T getLargest() {
}

public T getSmallest() {
}

3-您需要将所有内容转换为double(最大可能的数字实现)

T largest = (T) Double.valueOf(0f);

T smallest = (T) Double.valueOf(Double.MAX_VALUE);

4-遍历arraylist属性中的所有数字并进行适当的比较

for (T number : numbers) {
  // because T is an extension of Number, we can invoke the doubleValue method
  // offered on the Number class
  // convert your T variables to doubles
  double v = number.doubleValue();

  // you can then compare the doubleValue to keep the largest/smallest values.
}

希望这对你没什么帮助。:-)

相关问题