12

私たちが言うとき

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クラスではありません(ただし、プリミティブタイプです)。.classClassint

primitiveType.class.getName()そのようなクラス ( )が存在しない場合に、プリミティブ型で .class 操作を許可する背後にある動機は何ですか?

また、あなたが見る場合toString()クラスのメソッドClass

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

プリミティブ型はクラスやインターフェースではないため、単に名前 ( intfor int) を出力します。Classでは、存在しないクラスのオブジェクトの作成を許可するのはなぜでしょうか?

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 で予約されている型の一部です。

Integer と言うと、次のような java.lang パッケージ内のクラスです。

クラス整数{ ............. }

したがって、どのクラスでも .class を使用できます。プリミティブには適用されません。ところで、なぜこれが必要なのですか?用途は何ですか?

于 2013-09-25T12:01:12.190 に答える