我正在写一些代码,我希望有一个泛型参数,但它不能是原始的. 有没有办法确保函数的泛型参数不是原始的?
例如,如果我有以下函数检查参数是否为整数(使用Integer因为int没有.getClass()):
public static final <E> int len(E e) {
Integer i = 0;
if (e.getClass() == i.getClass()) {
throw new IllegalArgumentException();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我想继续使用每个原语,这个函数会很长(没有双关语).本质上,我可以阻止原始对象传递到具有泛型参数的函数吗?
它永远不是原始的.如果传入一个原语,它将被自动装箱到适当的包装类,例如int- > Integer.
关于你的语句int没有.getClass() ...
实际上,int 确实有一个类:int.class,但它主要由反射api用来表示方法参数类型或返回类型int.