【问题标题】:How can I get a Class object form primitive? [duplicate]我怎样才能得到一个类对象形式的原语? [复制]
【发布时间】:2016-02-26 00:42:08
【问题描述】:

显然这是可能的(因为ClassisPrimitive() 方法)但我怎么能直接做到这一点? 例如。能够将原始类型转换为 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


【解决方案1】:

对于int,您通常使用int.classInteger.TYPE。对于其他原始类型(例如double.class)也是如此。

【讨论】:

  • 啊。太棒了!不知道这个。10 分钟后会接受这个。
  • 即使void 也有void.classVoid.TYPE
  • @PeterLawrey - 这很有趣。在某些情况下这有用吗?
  • 你可以需要Main.class.getMethod("main", String[].class).getReturnType() == void.classCallable&lt;Void&gt; 如果你有一个实际上不返回任何东西的可调用对象。 (它可能会抛出一个检查异常,所以你不能使用Runnable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 2015-12-15
  • 2015-06-08
  • 1970-01-01
  • 2012-08-20
  • 2020-03-31
相关资源
最近更新 更多