重载同一方法以打印不同数据类型的ArrayList。

huangapple go评论62阅读模式
英文:

Overloading same method to print different data type arraylist

问题

我的任务是重载相同的方法以便能够使用相同的方法名称将两个数组列表的内容打印到屏幕上

以下是我尝试过的代码但由于这两个方法具有相同的名称所以无法工作

import java.util.ArrayList;

public class Tutotrial_2_1 {

public static void main(String[] args){
    //创建整数类型的数组列表
    ArrayList<Integer> listOfAges = new ArrayList<Integer>();
    //向数组列表添加项目
    listOfAges.add(25);
    listOfAges.add(36);
    listOfAges.add(45);
    listOfAges.add(67);
    listOfAges.add(87);
    listOfAges.add(32);
    listOfAges.add(33);
    listOfAges.add(45);
    
    //创建双精度类型的数组列表
    ArrayList<Double> listOfMarks = new ArrayList<Double>();
    //向数组列表添加项目
    listOfMarks.add(25.4);
    listOfMarks.add(36.5);
    listOfMarks.add(4.45);
    listOfMarks.add(55.67);
    listOfMarks.add(55.7);
    listOfMarks.add(32.0);
    listOfMarks.add(33.0);
    listOfMarks.add(45.0);
    
    //调用整数数组的display函数
    displayArray(listOfAges);
    displayArray(listOfMarks);
}

//显示listOfAges数组的函数
public static void displayArray(ArrayList<Integer> list){
    for(Integer indexes : list){
        System.out.println(indexes);
    }
}
public static void displayArray(ArrayList<Double> list){
    for(Double indexes : list){
        System.out.println(indexes);
    }
}
}
英文:

My task is to overload the same method, to be able to use the same method name, to print to screen, the contents of the both array list contents.

Below is my code I have tried. But it's not working because both methods have same name?

import java.util.ArrayList;
public class Tutotrial_2_1 {
public static void main(String[] args){
//Creating integer type array list
ArrayList&lt;Integer&gt;listOfAges = new ArrayList&lt;Integer&gt;();
//Adding items to array list
listOfAges.add(25);
listOfAges.add(36);
listOfAges.add(45);
listOfAges.add(67);
listOfAges.add(87);
listOfAges.add(32);
listOfAges.add(33);
listOfAges.add(45);
//Creating double type array list
ArrayList&lt;Double&gt;listOfMarks = new ArrayList&lt;Double&gt;();
//Adding items to array list
listOfMarks.add(25.4);
listOfMarks.add(36.5);
listOfMarks.add(4.45);
listOfMarks.add(55.67);
listOfMarks.add(55.7);
listOfMarks.add(32.0);
listOfMarks.add(33.0);
listOfMarks.add(45.0);
//Calling display function of integer array
displayArray(listOfAges);
displayArray(listOfMarks);
}
//Display fucntion of listOfAges array
public static void displayArray(ArrayList&lt;Integer&gt;list){
for(Integer indexes : list){
System.out.println(indexes);
}
}
public static void displayArray(ArrayList&lt;Double&gt;list){
for(Double indexes : list){
System.out.println(indexes);
}
}

}

答案1

得分: 2

由于Java的类型擦除,您无法针对通用类型重载方法。换句话说,您有两个解析为displayArray(ArrayList)的方法,因此对于重复声明的方法,将会得到编译错误。

幸运的是,在这里您实际上并不需要一个重载的方法 - 因为在Java中,任何对象都有一个toString方法,您可以只有一个方法,该方法接收一个列表,迭代列表并打印每个项:

public static void displayArray(List<?> list){
    for (Object indexes : list) {
        System.out.println(indexes);
    }
}
英文:

Due to Java's type erasure you can't overload a method over a generic type. In other words, you have two methods that resolve to displayArray(ArrayList), so you'll get a compilation error for a doubly declared method.

Luckily, you don't really need an overloaded method here - since any object in Java has a toString method, you can just have one method that receives a list, iterates over it, and print each item:

public static void displayArray(List&lt;?&gt; list){
    for (Object indexes : list) {
        System.out.println(indexes);
    }
}

答案2

得分: 1

如果我理解你的问题,如果你像这样更改你的方法:

public static void main(String[] args) {
  // 创建整数类型的数组列表
  ArrayList<Integer> listOfAges = new ArrayList<Integer>();
  // 向数组列表添加项目
  listOfAges.add(25);
  listOfAges.add(36);
  listOfAges.add(45);
  listOfAges.add(67);
  listOfAges.add(87);
  listOfAges.add(32);
  listOfAges.add(33);
  listOfAges.add(45);

  // 创建双精度类型的数组列表
  ArrayList<Double> listOfMarks = new ArrayList<Double>();
  // 向数组列表添加项目
  listOfMarks.add(25.4);
  listOfMarks.add(36.5);
  listOfMarks.add(4.45);
  listOfMarks.add(55.67);
  listOfMarks.add(55.7);
  listOfMarks.add(32.0);
  listOfMarks.add(33.0);
  listOfMarks.add(45.0);

  // 调用整数数组的显示函数
  displayArray(listOfAges);
  displayArray(listOfMarks);
}

// listOfAges数组的显示函数
public static <T> void displayArray(ArrayList<T> list) {
  for (T indexes : list) {
    System.out.println(indexes);
  }
}

应该可以工作。<T> 被用作通用类型。

英文:

If I understand your problem if you change your method like this:

public static void main(String[] args) {
//Creating integer type array list
ArrayList&lt;Integer&gt; listOfAges = new ArrayList&lt;Integer&gt;();
//Adding items to array list
listOfAges.add(25);
listOfAges.add(36);
listOfAges.add(45);
listOfAges.add(67);
listOfAges.add(87);
listOfAges.add(32);
listOfAges.add(33);
listOfAges.add(45);
//Creating double type array list
ArrayList&lt;Double&gt;listOfMarks = new ArrayList&lt;Double&gt;();
//Adding items to array list
listOfMarks.add(25.4);
listOfMarks.add(36.5);
listOfMarks.add(4.45);
listOfMarks.add(55.67);
listOfMarks.add(55.7);
listOfMarks.add(32.0);
listOfMarks.add(33.0);
listOfMarks.add(45.0);
//Calling display function of integer array
displayArray(listOfAges);
displayArray(listOfMarks);
}
//Display function of listOfAges array
public static &lt;T&gt; void displayArray(ArrayList&lt;T&gt;list){
for(T indexes : list){
System.out.println(indexes);
}
}

It should work. The <T> is use as a generic type.

huangapple
  • 本文由 发表于 2020年9月19日 00:55:38
  • 转载请务必保留本文链接:https://go.coder-hub.com/63959861.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定