12

When we say

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

it prints

class java.lang.Integer

which makes sense because java.lang.Integer is a class. So we can have a corresponding Class object.

But when I do

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

it prints int which I felt is kind of ambiguous as .class returns an object of type Class and int is not a class (but a primitive type).

What is the motive behind allowing .class operation on primitive types when there is no such class (primitiveType.class.getName()) present?

Also if you see toString() method of class Class

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

As primitive types are not classes or interfaces it simply print the name (int for int). So why allow creating Class objects of a class which is not present?

4

3 回答 3

13

它记录在javadoc中:

原始 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

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

想象一个方法:

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

您可以通过以下方式访问它:

MyClass.class.getDeclaredMethod("m", int.class);
于 2013-09-25T12:02:00.030 回答
0

找到另一个应用程序,例如int.class。考虑模拟该方法

class MyClass {
    int myMethod(final int arg) {}
}

要使用 Mockito 模拟它,您可以使用:

    when(myClass.myMethod(any(int.class)).thenReturn(1);

我自己很惊讶这确实有效,而且比简单的更清晰

    when(myClass.myMethod(any()).thenReturn(1);
于 2021-05-21T15:58:17.053 回答
-1

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

当您说整数时,它是 java.lang 包中的一个类,例如:

类整数{ ...... }

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

于 2013-09-25T12:01:12.190 回答