确保通用参数不是原始参数

int*_*ing 1 java generics

我正在写一些代码,我希望有一个泛型参数,但它不能是原始的. 有没有办法确保函数的泛型参数不是原始的?

例如,如果我有以下函数检查参数是否为整数(使用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)

如果我想继续使用每个原语,这个函数会很长(没有双关语).本质上,我可以阻止原始对象传递到具有泛型参数的函数吗?

Boh*_*ian 8

永远不是原始的.如果传入一个原语,它将被自动装箱到适当的包装类,例如int- > Integer.


关于你的语句int没有.getClass() ...

实际上,int 确实有一个类:int.class,但它主要由反射api用来表示方法参数类型或返回类型int.