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
,长度通过反射确定)。