【问题标题】:Generic method for list String and list of String[] in Java, or list of T and list of T[]Java 中列表 String 和 String[] 列表,或 T 列表和 T[] 列表的通用方法
【发布时间】:2019-03-05 17:44:57
【问题描述】:

我尝试写一个通用的打印方法:

  1. 元素列表,例如 Integer、String 等列表。
  2. T[] 列表,例如List<String[]>, List<Integer[]> 等。

我有以下两种方法:

public static <T> void printList(List<T> list){
    for(T n : list) {
        System.out.print("[" + n + "]");
    }
}
public static <T> void printList(List<T[]> list){
    for(T[] arr: list) {
        for(T n : arr){
            System.out.print("[" + n + "]");
        }
    }
}

我得到编译错误:

public static <T> void printList(List<T[]> list){
 where T#1,T#2 are type-variables:
 T#1 extends Object declared in method <T#1>printList(List<T#1[]>)
 T#2 extends Object declared in method <T#2>printList(List<T#2>)

有什么方法可以为List&lt;T&gt;List&lt;T[]&gt; 提供方法printList?

【问题讨论】:

  • 你不能有多个具有相同签名的方法。您需要更改其中之一的名称或参数。
  • This question over the software engineering stack 在更一般的设计意义上可能对您有所帮助。
  • 根据经验,不要混合泛型和数组。

标签: java arrays list generics overloading


【解决方案1】:

在运行时,您的List&lt;T&gt;List&lt;T[]&gt; 完全相同,因为泛型类型已被编译器删除。因此,这两种方法都具有相同的签名,并且您会出现编译错误。要解决此问题,只需为其中一种方法指定不同的名称。

详细了解擦除概念What is the concept of erasure in generics in Java?Java spec

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多