【发布时间】:2016-02-26 00:42:08
【问题描述】:
显然这是可能的(因为Class 有isPrimitive() 方法)但我怎么能直接做到这一点?
例如。能够将原始类型转换为 Class 的反射 API:
import java.lang.reflect.Method;
public class TestClass {
public static void m(){}
public static void m(Object o){}
public static void m(int i){}
public static void m(Integer i){}
public static void main(String[] args){
TestClass tc=new TestClass();
Method[] mtds=tc.getClass().getDeclaredMethods();
for (int i = 0; i < mtds.length; i++) {
System.out.print(mtds[i].getName());
Class[] prms=mtds[i].getParameterTypes();
for (int j = 0; j < prms.length; j++) {
System.out.print("-"+prms[j].getCanonicalName());
}
System.out.println();
}
}
}
输出是:
米
m-java.lang.Object
m-int
m-java.lang.Integer
main-java.lang.String[]
Integer 和 int 不同,所以它不是自动装箱。我没有想到任何事情(除了使用反射和 getParameterTypes() 创建实用程序类)(我尝试过的所有其他事情都失败了)。
【问题讨论】:
-
我不明白你的问题。原语有类文字。但是给定一个原始值(或者更确切地说是原始类型的变量),您已经知道它的类型。你不需要使用类似于
getClass的东西。 -
这与自动装箱有什么关系?你能说出你的预期输出是什么吗?不是很清楚。
-
@RohitJain - 我的第一个想法是
int被包裹到Integer所以可以从 int 获取 Class 对象。但显然我错了:-)
标签: java reflection