我试图制作以下函数来计算任何数组中不同元素的数量:
public static long distinctElements(T[] ar)
{
return Arrays.asList(ar).stream().distinct().count();
}
这里的问题是我不能使用' T [] ar'作为参数(Java表示它不知道类型T)。我怎样才能解决这个问题?此函数位于实用程序类中,该类不包含类型T(如ArrayList和TreeSet)。
答案 0 :(得分:4)
public static <T> long distinctElements(T[] ar)
应该做的神奇。
答案 1 :(得分:2)
Java不知道T
是什么。例如,它也是一个类的合法名称。因此,您首先必须定义T
是一个类型变量。
您可以通过将其置于返回类型之前的角度来执行此操作,如下所示:
public static <T> long distinctElements(T[] ar) { ... }
另请注意,在您的情况下,您不需要泛型。如果A
是B
的子类型,那么A[]
也是B[]
的子类型(这是不对于泛型的情况,办法)。因此,您还可以按如下方式定义方法:
public static long distinctElements(Object[] ar) { ... }
能够使用与参数完全相同的数组来调用它。
答案 2 :(得分:1)
T
未声明,因此编译器抱怨这一点。在方法类声明它:
public static <T> long distinctElements(T[] ar) {
return Arrays.asList(ar).stream().distinct().count();
}
此外,您可以使用Arrays#stream
:
public static <T> long distinctElements(T[] ar) {
return Arrays.stream(ar).distinct().count();
}