gpt4 book ai didi

java采用具有相同方法名称的不同列表类型

转载 作者:行者123 更新时间:2023-11-30 06:51:04 26 4
gpt4 key购买 nike

是否可以有多个同名但采用不同列表类型的方法。这当然可以通过定期覆盖来实现,但是 java 无法区分两种不同的 List 类型之间的区别。除了使用不同的名称之外,还有其他解决方法吗?例如:

  /**
* Prints a given in list, only works on numerical types
*/
public static void printList(List list) {
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i));
if (i != list.size() - 1) System.out.print(", ");
}
System.out.println();
}

如果我们有将无法工作

  /**
* Prints a given in list of Vector3i
*/
public static void printList(List<Vector3i> list) {
for (int i = 0; i < list.size(); i++) {
System.out.print("(");
System.out.print(list.get(i).x);
System.out.print(", ");
System.out.print(list.get(i).y);
System.out.print(", ");
System.out.print(list.get(i).z);
System.out.print(")");
if (i != list.size() - 1) System.out.print(", ");
}
System.out.println();
}

在同一个类(class)。

最佳答案

不能重载具有泛型类型的方法,例如 List<T> , 因为 Java type erasure .这两种方法在运行时将具有相同的签名,即 void printList(List list) ,这是不可能的。

但是,您始终可以覆盖 toString或在您的类中实现自定义打印功能并拥有一个 printList方法而不是两个,这是去这里的方法。

这是一个例子:

public class Vector3i {

// Do stuff...

@Override
public String toString() {
return "(" + x + ", " + y + ", " + z +")";
}
}

还有你的打印功能:

public static <T> void printList(List<T> list) {
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i).toString());
if (i != list.size() - 1)
System.out.print(", ");
}
System.out.println();
}

关于java采用具有相同方法名称的不同列表类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40559326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com