java中基本类型的泛型方法

java中基本类型的泛型方法,java,generics,primitive,Java,Generics,Primitive,以下是一个例子: import java.util.Collection; /** * Created by IDEA on 16/11/14. */ public class Size { public static int size(Iterable<?> data) { if (data instanceof Collection) { return ((Collection<?>) data).si

以下是一个例子:

import java.util.Collection;

/**
 * Created by IDEA on 16/11/14.
 */
public class Size 
{
    public static int size(Iterable<?> data) 
    {
        if (data instanceof Collection) {
            return ((Collection<?>) data).size();
        }
        int counter = 0;
        for (Object i : data) {
            counter++;
        }
        return counter;
    }

    public static int size(int[] data) 
    {
        return data.length;
    }

    public static int size(double[] data) 
    {
        return data.length;
    }

    public static int size(float[] data) 
    {
        return data.length;
    }

    public static int size(short[] data) 
    {
        return data.length;
    }

    public static int size(boolean[] data) 
    {
        return data.length;
    }

    public static int size(char[] data) 
    {
        return data.length;
    }

    public static <T> int size(T[] data) 
    {
        return data.length;
    }
}
import java.util.Collection;
/**
*由IDEA于2014年11月16日创建。
*/
公营班级人数
{
公共静态整型大小(Iterable数据)
{
if(收集的数据实例){
返回((收集)数据).size();
}
int计数器=0;
用于(对象i:数据){
计数器++;
}
返回计数器;
}
公共静态整型大小(整型[]数据)
{
返回数据长度;
}
公共静态整型大小(双[]数据)
{
返回数据长度;
}
公共静态整型大小(浮点[]数据)
{
返回数据长度;
}
公共静态整型大小(短[]数据)
{
返回数据长度;
}
公共静态整型大小(布尔[]数据)
{
返回数据长度;
}
公共静态整型大小(字符[]数据)
{
返回数据长度;
}
公共静态整型大小(T[]数据)
{
返回数据长度;
}
}

size
方法对于所有基元数组都是相同的。有没有办法避免这种冗余?

没有。这就是使用原语的代价


您可以在
java.util.Arrays
类中的许多方法中看到这种不可避免的冗余示例,其中每种基元数组都有不同的方法(示例:copyOf、sort、swap等).

这是一个关于将基元类型用作泛型的问题,还是一个关于查找基元数组长度的通用方法的问题?这是关于将基元类型用作泛型的问题。对于您的特定示例,
public static int size(Object o){return java.lang.reflect.array.getLength(o);}
可作为阵列机箱的替代品。除了
size(…)
现在将接受任何类型并在运行时抛出
IllegalArgumentException
之外,它的总体行为几乎与您的示例相同,而不是在未实现的类型上出现编译时错误。这在性能方面有任何缺点吗?我不确定,您可以度量它。但是,我保证性能瓶颈(如果有)不会出现在确定阵列的大小上。您所做的任何其他操作都会使其相形见绌。附录:在OP的特定示例中,
Array.getLength()
可用于任何数组类型(参数为
Object
,长度通过反射确定)。