Java 泛型数组作为参数

Java 泛型数组作为参数,java,generics,Java,Generics,我尝试使用以下函数计算任何数组中不同元素的数量: public static long distinctElements(T[] ar) { return Arrays.asList(ar).stream().distinct().count(); } 这里的问题是我不能使用'T[]ar'作为参数(Java说它不知道类型T)。我怎样才能解决这个问题?此函数位于不包含类型T的实用程序类中(如ArrayList和TreeSet do)。T未声明,因此编译器对此表示不满。在方法类中声明它:

我尝试使用以下函数计算任何数组中不同元素的数量:

public static long distinctElements(T[] ar)
{
    return Arrays.asList(ar).stream().distinct().count();
}

这里的问题是我不能使用'T[]ar'作为参数(Java说它不知道类型T)。我怎样才能解决这个问题?此函数位于不包含类型T的实用程序类中(如ArrayList和TreeSet do)。

T
未声明,因此编译器对此表示不满。在方法类中声明它:

public static <T> long distinctElements(T[] ar) {
    return Arrays.asList(ar).stream().distinct().count();
}
公共静态长距离(T[]ar)

Java不知道什么是
T
。例如,它也是一个类的合法名称。因此,首先必须定义
T
是一个类型变量

您可以将其放置在返回类型之前的角度中,如下所示:

public static <T> long distinctElements(T[] ar) { ... }
public static long distinctElements(Object[] ar) { ... }
可以使用与参数完全相同的数组调用它

public static <T> long distinctElements(T[] ar) { ... }
public static long distinctElements(Object[] ar) { ... }