2013-09-25 65 views
4

当我们说我们如何在原始类型上使用.class?

Class c = Integer.class; 
    System.out.println(c); 

它打印

class java.lang.Integer 

这是有道理的,因为java.lang.Integer是一类。所以我们可以有一个对应的Class对象。

但是当我做

Class c1 = int.class; 
    System.out.println(c1); 

其打印int我觉得是种暧昧的.class回报类型的对象Classint不是一个类(但基本类型)。

当基本类型(primitiveType.class.getName())不存在时允许.class操作背后的动机是什么?

此外,如果你看到toString()Class类的方法

public String toString() { 
    return (isInterface() ? "interface " : (isPrimitive() ? "" : "class ")) 
     + getName(); 
} 

由于原始类型不是类或接口简单地打印名称(intint)。那么为什么允许创建一个不存在的类的对象呢?

+0

我觉得这是Java反模式之一。 –

回答

3

据记载在the javadoc

的基本Java类型(布尔,字节,字符,短,整型,长整型,浮点和双),并且关键字void也表示为类对象。

当你想通过反射调用一个需要原始参数的方法时,它特别有用。

试想一个方法:

class MyClass { 
    void m(int i) {} 
} 

你可以访问它:

MyClass.class.getDeclaredMethod("m", int.class); 
0

原始不是一类。这些是Java中的一些保留类型。

当你说整数,它在java.lang包如类:

Integer类{ ............ }

因此对于任何一类您可以使用.class,不适用于基元。顺便说一句,你为什么需要这个?有什么用?