Java : Class (クラス) - API使用例

Class (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

Classクラスのインスタンスは、実行中のJavaアプリケーションのクラスおよびインタフェースを表します。 enumクラスとrecordクラスはクラスの一種で、annotationインタフェースはインタフェースの一種です。

クラス構成

Classクラスを使うと、対象となるクラスの

  • クラス名
  • パッケージ
  • フィールド
  • メソッド

といった各種情報にアクセスできます。

Classクラスのインスタンスを取得するには、

  • 直接取得 : クラス名.class
  • オブジェクトから取得 : getClass() メソッド

を使います。

.class では、int や double といったプリミティブ型や、配列なんかも直接取得することができます。

System.out.println(Object.class); // class java.lang.Object
System.out.println(int.class); // int
System.out.println(String[].class); // class [Ljava.lang.String;

final var str = "abcd";
System.out.println(str.getClass()); // class java.lang.String
class Foo {
    private int value;
    private String str;

    void aaa() {
    }

    void bbb(int x, int y) {
    }
}

final var cls = Foo.class;

System.out.println("name : " + cls.getSimpleName());

System.out.println("-- field --");
for (final var field : cls.getDeclaredFields()) {
    System.out.println(field);
}

System.out.println("-- method --");
for (final var method : cls.getDeclaredMethods()) {
    System.out.println(method);
}

// 結果
// ↓
//name : Foo
//-- field --
//private int Foo.value
//private java.lang.String Foo.str
//-- method --
//void Foo.aaa()
//void Foo.bbb(int,int)

メソッド

Class<?> arrayType ()

コンポーネント型がこのClassによって記述されている配列型のClassを返します。

final var cls = Object.class;

System.out.println(cls.isArray()); // false
System.out.println(cls.getSimpleName()); // Object

System.out.println(cls.arrayType().isArray()); // true
System.out.println(cls.arrayType().getSimpleName()); // Object[]
final int[] array = {1, 2, 3};
System.out.println(Arrays.toString(array)); // [1, 2, 3]

final var cls = array.getClass();

System.out.println(cls.isArray()); // true
System.out.println(cls.getSimpleName()); // int[]

System.out.println(cls.arrayType().isArray()); // true
System.out.println(cls.arrayType().getSimpleName()); // int[][]

<U> Class<? extends U> asSubclass (Class<U> clazz)

指定されたクラス・オブジェクトによって表されるクラスのサブクラスを表すためにこのClassオブジェクトをキャストします。

class Base {
}

class Sub extends Base {
}

final var cls = Sub.class.asSubclass(Base.class);
System.out.println(cls.getSimpleName()); // Sub

try {
    Base.class.asSubclass(Sub.class);
} catch (ClassCastException e) {
    System.out.println("ClassCastException!");
}

// 結果
// ↓
//ClassCastException!

T cast (Object obj)

このClassオブジェクトが表すクラスまたはインタフェースにオブジェクトをキャストします。

class Base {
}

class Sub extends Base {
}
final Base base = new Sub();

final Sub sub = Sub.class.cast(base);
System.out.println("Cast OK");

// 結果
// ↓
//Cast OK
final Base base = new Base();

try {
    final Sub sub = Sub.class.cast(base);
} catch (ClassCastException e) {
    System.out.println("ClassCastException!");
}

// 結果
// ↓
//ClassCastException!

Class<?> componentType ()

配列型を説明する場合は、Classのコンポーネント型を返します。それ以外の場合は、nullを返します。

このメソッドは getComponentType() と同等です。
そちらのAPI使用例をご参照ください。

Optional<ClassDesc> describeConstable ()

このインスタンスの名目記述子を返します(作成可能な場合)、作成できない場合は空のOptionalを返します。

final var cls = String.class;
System.out.println(cls.describeConstable()); // Optional[ClassDesc[String]]
final var cls = Object[].class;
System.out.println(cls.describeConstable()); // Optional[ClassDesc[Object[]]]
final var cls = int.class;
System.out.println(cls.describeConstable()); // Optional[PrimitiveClassDesc[int]]

String descriptorString ()

このClassオブジェクトによって表されるエンティティ(クラス、インタフェース、配列クラス、プリミティブ型またはvoid)の記述子文字列を返します。

final var cls = String.class;
System.out.println(cls.descriptorString()); // Ljava/lang/String;
final var cls = Object[].class;
System.out.println(cls.descriptorString()); // [Ljava/lang/Object;
System.out.println(byte.class.descriptorString()); // B
System.out.println(int.class.descriptorString()); // I
System.out.println(char.class.descriptorString()); // C
System.out.println(double.class.descriptorString()); // D

boolean desiredAssertionStatus ()

このメソッドの呼出し時にこのクラスを初期化する場合、クラスに割り当てられるアサーション・ステータスを返します。

final var cls = Object.class;
System.out.println(cls.desiredAssertionStatus()); // false

static Class<?> forName (Module module, String name)

与えられたモジュール内の与えられた「バイナリ名」を持つClassを返します。

final var module = String.class.getModule();
System.out.println(module); // module java.base

final var cls = Class.forName(module, "java.lang.String");
System.out.println(cls.getName()); // java.lang.String

static Class<?> forName (String className)

指定された文字列名を持つクラスまたはインタフェースに関連付けられた、Classオブジェクトを返します。

final var cls = Class.forName("java.lang.String");
System.out.println(cls.getName()); // java.lang.String

static Class<?> forName (String name, boolean initialize, ClassLoader loader)

指定されたクラス・ローダーを使って、指定された文字列名を持つクラスまたはインタフェースに関連付けられたClassオブジェクトを返します。

final var cls = Class.forName("java.lang.String", false, getClass().getClassLoader());
System.out.println(cls.getName()); // java.lang.String
class Foo {
    static {
        System.out.println("Initialize!");
    }
}

final var name = Foo.class.getTypeName();
final var loader = getClass().getClassLoader();

System.out.println("-- initialize false --");

final var ret1 = Class.forName(name, false, loader);
System.out.println(ret1.getSimpleName());

System.out.println("-- initialize true --");

final var ret2 = Class.forName(name, true, loader);
System.out.println(ret2.getSimpleName());

// 結果
// ↓
//-- initialize false --
//Foo
//-- initialize true --
//Initialize!
//Foo

AnnotatedType[] getAnnotatedInterfaces ()

Classオブジェクトによって表されるエンティティのスーパーインタフェースを指定する型の使用を表すAnnotatedTypeオブジェクトの配列を返します。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@interface Foo {
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@interface Bar {
}
interface A {
}

class B implements @Foo @Bar A {
}

final var annotatedTypes = B.class.getAnnotatedInterfaces();

for (final var annotatedType : annotatedTypes) {

    System.out.println(annotatedType.getType() == A.class);

    for (final var a : annotatedType.getAnnotations()) {
        System.out.println(a.annotationType().getSimpleName());
    }
}

// 結果
// ↓
//true
//Foo
//Bar

AnnotatedType getAnnotatedSuperclass ()

Classオブジェクトによって表されるエンティティのスーパークラスを指定する型の使用を表すAnnotatedTypeオブジェクトを返します。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@interface Foo {
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE_USE)
@interface Bar {
}
class A {
}

class B extends @Foo @Bar A {
}

final var annotatedType = B.class.getAnnotatedSuperclass();
System.out.println(annotatedType.getType() == A.class);

for (final var a : annotatedType.getAnnotations()) {
    System.out.println(a.annotationType().getSimpleName());
}

// 結果
// ↓
//true
//Foo
//Bar

<A extends Annotation> A getAnnotation (Class<A> annotationClass)

存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@interface Foo {
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Bar {
}

@Foo
class A {
}

@Bar
class B extends A {
}
final var cls = B.class;

final var ret1 = cls.getAnnotation(Foo.class);
System.out.println(ret1.annotationType().getSimpleName()); // Foo

final var ret2 = cls.getAnnotation(Bar.class);
System.out.println(ret2.annotationType().getSimpleName()); // Bar
final var cls = B.class;

final var ret1 = cls.getDeclaredAnnotation(Foo.class);
System.out.println(ret1); // null

final var ret2 = cls.getDeclaredAnnotation(Bar.class);
System.out.println(ret2.annotationType().getSimpleName()); // Bar

Annotation[] getAnnotations ()

この要素に存在する注釈を返します。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@interface Foo {
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface Bar {
}

@Foo
class A {
}

@Bar
class B extends A {
}
final var cls = B.class;

for (final var a : cls.getAnnotations()) {
    System.out.println(a.annotationType().getSimpleName());
}

// 結果
// ↓
//Foo
//Bar
final var cls = B.class;

for (final var a : cls.getDeclaredAnnotations()) {
    System.out.println(a.annotationType().getSimpleName());
}

// 結果
// ↓
//Bar

<A extends Annotation> A[] getAnnotationsByType (Class<A> annotationClass)

この要素に関連付けられている注釈を返します。

@Repeatable(Bar.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@interface Foo {
    String value();
}

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Inherited
@interface Bar {
    Foo[] value();
}

@Foo("a1")
@Foo("a2")
class A {
}

class B extends A {
}
System.out.println("-- A.class --");
for (final var a : A.class.getAnnotationsByType(Foo.class)) {
    System.out.println(a.annotationType().getSimpleName() + " : " + a.value());
}

System.out.println("-- B.class --");
for (final var a : B.class.getAnnotationsByType(Foo.class)) {
    System.out.println(a.annotationType().getSimpleName() + " : " + a.value());
}

System.out.println("-- end --");

// 結果
// ↓
//-- A.class --
//Foo : a1
//Foo : a2
//-- B.class --
//Foo : a1
//Foo : a2
//-- end --
System.out.println("-- A.class --");
for (final var a : A.class.getDeclaredAnnotationsByType(Foo.class)) {
    System.out.println(a.annotationType().getSimpleName() + " : " + a.value());
}

System.out.println("-- B.class --");
for (final var a : B.class.getDeclaredAnnotationsByType(Foo.class)) {
    System.out.println(a.annotationType().getSimpleName() + " : " + a.value());
}

System.out.println("-- end --");

// 結果
// ↓
//-- A.class --
//Foo : a1
//Foo : a2
//-- B.class --
//-- end --

String getCanonicalName ()

「Java言語仕様」で定義されている基礎となるクラスの正規名を返します。

final var cls = String.class;

System.out.println(cls.getName()); // java.lang.String
System.out.println(cls.getTypeName()); // java.lang.String
System.out.println(cls.getCanonicalName()); // java.lang.String
System.out.println(cls.getSimpleName());  // String
final var cls = int[].class;

System.out.println(cls.getName()); // [I
System.out.println(cls.getTypeName()); // int[]
System.out.println(cls.getCanonicalName()); // int[]
System.out.println(cls.getSimpleName());  // int[]
System.out.println(getClass().getName()); // com.example.lang.system.ClassTest

final var runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("Run!");
    }
};

final var cls = runnable.getClass();

System.out.println(cls.getName()); // com.example.lang.system.ClassTest$1
System.out.println(cls.getTypeName()); // com.example.lang.system.ClassTest$1
System.out.println(cls.getCanonicalName()); // null
System.out.println(cls.getSimpleName().isEmpty()); // true

Class<?>[] getClasses ()

このClassオブジェクトが表すクラスのメンバーである、すべてのpublicクラスおよびインタフェースを表すClassオブジェクトを格納している配列を返します。

public class A {
    public class Foo {
    }
}

public class B extends A {
    public class Bar {
    }

    private class Baz {
    }
}
final var cls = B.class;

for (final var c : cls.getClasses()) {
    System.out.println(c.getSimpleName());
}

// 結果
// ↓
//Bar
//Foo
final var cls = B.class;

for (final var c : cls.getDeclaredClasses()) {
    System.out.println(c.getSimpleName());
}

// 結果
// ↓
//Baz
//Bar

ClassLoader getClassLoader ()

クラスのクラス・ローダーを返します。

final var cls = getClass();
final var loader = cls.getClassLoader();

System.out.println(loader.getName()); // app
final var loader = Object.class.getClassLoader();
System.out.println(loader); // null

Class<?> getComponentType ()

配列のコンポーネント型を表すClassを返します。

final var cls = int[].class;

System.out.println(cls.isArray()); // true
System.out.println(cls.getSimpleName()); // int[]
System.out.println(cls.getComponentType().getSimpleName()); // int
final var cls = String.class;

System.out.println(cls.isArray()); // false
System.out.println(cls.getSimpleName()); // String
System.out.println(cls.getComponentType()); // null

Constructor<T> getConstructor (Class<?>... parameterTypes)

このClassオブジェクトが表すクラスの指定されたpublicコンストラクタをリフレクトするConstructorオブジェクトを返します。

public class Foo {
    public Foo(String s) {
    }

    public Foo(int i, double d) {
    }

    private Foo(char c) {
    }
}
final var cls = Foo.class;

final var ret1 = cls.getConstructor(String.class);
System.out.println(ret1); // public Foo(java.lang.String)

final var ret2 = cls.getConstructor(int.class, double.class);
System.out.println(ret2); // public Foo(int,double)

try {
    final var ret3 = cls.getConstructor(char.class);
} catch (NoSuchMethodException e) {
    System.out.println("NoSuchMethodException!");
}

// 結果
// ↓
//NoSuchMethodException!
final var cls = Foo.class;

final var ret1 = cls.getDeclaredConstructor(String.class);
System.out.println(ret1); // public Foo(java.lang.String)

final var ret2 = cls.getDeclaredConstructor(int.class, double.class);
System.out.println(ret2); // public Foo(int,double)

final var ret3 = cls.getDeclaredConstructor(char.class);
System.out.println(ret3); // private Foo(char)

Constructor<?>[] getConstructors ()

このClassオブジェクトが表すクラスのすべてのpublicコンストラクタをリフレクトするConstructorオブジェクトを格納している配列を返します。

public class Foo {
    public Foo(String s) {
    }

    public Foo(int i, double d) {
    }

    private Foo(char c) {
    }
}
final var cls = Foo.class;

for (final var constructor : cls.getConstructors()) {
    System.out.println(constructor);
}

// 結果
// ↓
//public Foo(java.lang.String)
//public Foo(int,double)
final var cls = Foo.class;

for (final var constructor : cls.getDeclaredConstructors()) {
    System.out.println(constructor);
}

// 結果
// ↓
//public Foo(java.lang.String)
//public Foo(int,double)
//private Foo(char)

<A extends Annotation> A getDeclaredAnnotation (Class<A> annotationClass)

直接存在する場合は、この要素の指定された型の注釈を返し、そうでない場合はnullを返します。

このメソッドの使用例は、getAnnotation(Class<A> annotationClass) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Annotation[] getDeclaredAnnotations ()

この要素に直接存在する注釈を返します。

このメソッドの使用例は、getAnnotations() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

<A extends Annotation> A[] getDeclaredAnnotationsByType (Class<A> annotationClass)

直接存在するか間接的に存在する場合は、この要素の指定された型の注釈を返します。

このメソッドの使用例は、getAnnotationsByType(Class<A> annotationClass) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Class<?>[] getDeclaredClasses ()

このClassオブジェクトが表すクラスのメンバーとして宣言されたすべてのクラスおよびインタフェースをリフレクトするClassオブジェクトの配列を返します。

このメソッドの使用例は、getClasses() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Constructor<T> getDeclaredConstructor (Class<?>... parameterTypes)

このClassオブジェクトが表すクラスまたはインタフェースの指定されたコンストラクタをリフレクトするConstructorオブジェクトを返します。

このメソッドの使用例は、getConstructor(Class<?>... parameterTypes) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Constructor<?>[] getDeclaredConstructors ()

このClassオブジェクトが表すクラスによって宣言されたすべてのコンストラクタをリフレクトするConstructorオブジェクトの配列を返します。

このメソッドの使用例は、getConstructors() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Field getDeclaredField (String name)

このClassオブジェクトが表すクラスまたはインタフェースの、指定された宣言されたフィールドをリフレクトするFieldオブジェクトを返します。

public class A {
    public String a1;
}

public class B extends A {
    public int b1;
    private char b2;
}
final var cls = B.class;

final var ret1 = cls.getField("a1");
System.out.println("a1 : " + ret1);

final var ret2 = cls.getField("b1");
System.out.println("b1 : " + ret2);

try {
    final var ret3 = cls.getField("b2");
} catch (NoSuchFieldException e) {
    System.out.println("b2 : NoSuchFieldException!");
}

// 結果
// ↓
//a1 : public java.lang.String A.a1
//b1 : public int B.b1
//b2 : NoSuchFieldException!
final var cls = B.class;

try {
    final var ret1 = cls.getDeclaredField("a1");
} catch (NoSuchFieldException e) {
    System.out.println("a1 : NoSuchFieldException!");
}

final var ret2 = cls.getDeclaredField("b1");
System.out.println("b1 : " + ret2);

final var ret3 = cls.getDeclaredField("b2");
System.out.println("b2 : " + ret3);

// 結果
// ↓
//a1 : NoSuchFieldException!
//b1 : public int B.b1
//b2 : private char B.b2

Field[] getDeclaredFields ()

このClassオブジェクトが表すクラスまたはインタフェースによって宣言されたすべてのフィールドをリフレクトするFieldオブジェクトの配列を返します。

public class A {
    public String a1;
}

public class B extends A {
    public int b1;
    private char b2;
}
final var cls = B.class;

for (final var method : cls.getFields()) {
    System.out.println(method);
}

// 結果
// ↓
//public int B.b1
//public java.lang.String A.a1
final var cls = B.class;

for (final var method : cls.getDeclaredFields()) {
    System.out.println(method);
}

// 結果
// ↓
//public int B.b1
//private char B.b2

Method getDeclaredMethod (String name, Class<?>... parameterTypes)

このClassオブジェクトが表すクラスまたはインタフェースの、指定された宣言されたメソッドをリフレクトするMethodオブジェクトを返します。

public class A {
    public void a1(String s) {
    }
}

public class B extends A {
    public void b1(int i, double d) {
    }

    private void b2() {
    }
}
final var cls = B.class;

final var ret1 = cls.getMethod("a1", String.class);
System.out.println("a1 : " + ret1);

final var ret2 = cls.getMethod("b1", int.class, double.class);
System.out.println("b1 : " + ret2);

try {
    final var ret3 = cls.getMethod("b2");
} catch (NoSuchMethodException e) {
    System.out.println("b2 : NoSuchMethodException!");
}

// 結果
// ↓
//a1 : public void A.a1(java.lang.String)
//b1 : public void B.b1(int,double)
//b2 : NoSuchMethodException!
final var cls = B.class;

try {
    final var ret1 = cls.getDeclaredMethod("a1", String.class);
} catch (NoSuchMethodException e) {
    System.out.println("a1 : NoSuchMethodException!");
}

final var ret2 = cls.getDeclaredMethod("b1", int.class, double.class);
System.out.println("b1 : " + ret2);

final var ret3 = cls.getDeclaredMethod("b2");
System.out.println("b2 : " + ret3);

// 結果
// ↓
//a1 : NoSuchMethodException!
//b1 : public void B.b1(int,double)
//b2 : private void B.b2()

Method[] getDeclaredMethods ()

この Classオブジェクトによって表されるクラスまたはインタフェースのすべての宣言されたメソッドをリフレクトするMethodオブジェクトが格納された配列を返します。これには、public、protected、デフォルト(package)アクセスおよびprivateメソッドが含まれますが、継承されたメソッドは除外されます。

public class A {
    public void a1(String s) {
    }
}

public class B extends A {
    public void b1(int i, double d) {
    }

    private void b2() {
    }
}
final var cls = B.class;

for (final var method : cls.getMethods()) {
    System.out.println(method);
}

// 結果
// ↓
//public B.b1(int,double)
//public A.a1(java.lang.String)
//public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
//public final void java.lang.Object.wait() throws java.lang.InterruptedException
//public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
//public boolean java.lang.Object.equals(java.lang.Object)
//public java.lang.String java.lang.Object.toString()
//public native int java.lang.Object.hashCode()
//public final native java.lang.Class java.lang.Object.getClass()
//public final native void java.lang.Object.notify()
//public final native void java.lang.Object.notifyAll()
final var cls = B.class;

for (final var method : cls.getDeclaredMethods()) {
    System.out.println(method);
}

// 結果
// ↓
//private void B.b2()
//public void B.b1(int,double)

Class<?> getDeclaringClass ()

このClassオブジェクトが表すクラスまたはインタフェースが別のクラスのメンバーの場合は、それが宣言されたクラスを表すClassオブジェクトを返します。

class Foo {
    class Bar {
    }
}

System.out.println(Foo.Bar.class.getDeclaringClass()); // Foo
System.out.println(Foo.class.getDeclaringClass()); // null

System.out.println(String.class.getDeclaringClass()); // null
System.out.println(int.class.getDeclaringClass()); // null

Class<?> getEnclosingClass ()

基本となるクラスを直接囲むクラスを返します。

class OuterA {
    class InnerB {
    }
}

final var cls = OuterA.InnerB.class;

System.out.println(cls.getSimpleName()); // InnerB
System.out.println(cls.getEnclosingClass().getSimpleName()); // OuterA

Constructor<?> getEnclosingConstructor ()

このClassオブジェクトが、コンストラクタ内のローカル・クラスまたは匿名クラスを表す場合は、基本となるクラスを直接囲むコンストラクタを表すConstructorオブジェクトを返します。

class Foo {
    Foo() {
        class Bar {
        }

        final var cls = Bar.class;
        System.out.println("cls : " + cls.getSimpleName());

        final var ret = cls.getEnclosingConstructor();
        System.out.println("ret : " + ret);
    }
}
new Foo();

// 結果
// ↓
//cls : Bar
//ret : Foo()

Method getEnclosingMethod ()

このClassオブジェクトが、メソッド内のローカル・クラスまたは匿名クラスを表す場合は、基本となるクラスを直接囲むメソッドを表すMethodオブジェクトを返します。

class Foo {
    void aaa() {
        class Bar {
        }

        final var cls = Bar.class;
        System.out.println("cls : " + cls.getSimpleName());

        final var ret = cls.getEnclosingMethod();
        System.out.println("ret : " + ret);

    }
}

new Foo().aaa();

// 結果
// ↓
//cls : Bar
//ret : void Foo.aaa()

T[] getEnumConstants ()

このenumクラスの要素を返します。このClassオブジェクトがenumクラスを表さない場合はnullを返します。

enum Foo {
    C1,
    C2,
    C3,
}

final var cls = Foo.class;
System.out.println(cls.isEnum());

System.out.println("-- for --");
for (final var constant : cls.getEnumConstants()) {
    System.out.println(constant);
}

// 結果
// ↓
//true
//-- for --
//C1
//C2
//C3

Field getField (String name)

このClassオブジェクトが表すクラスまたはインタフェースの、指定されたpublicメンバー・フィールドをリフレクトするFieldオブジェクトを返します。

このメソッドの使用例は、getDeclaredField(String name) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Field[] getFields ()

このClassオブジェクトが表すクラスまたはインタフェースのすべてのアクセス可能なpublicフィールドをリフレクトする、Fieldオブジェクトを保持している配列を返します。

このメソッドの使用例は、getDeclaredFields() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Type[] getGenericInterfaces ()

このClassオブジェクトによって表されるクラスまたはインタフェースによって直接実装されるインタフェースを表すTypeを返します。

interface A1 {
}

interface A2<T> {
}

class B implements A1, A2<String> {
}

final var cls = B.class;

System.out.println("-- getInterfaces --");
for (final var i : cls.getInterfaces()) {
    System.out.println(i);
}

System.out.println("-- getGenericInterfaces --");
for (final var i : cls.getGenericInterfaces()) {
    System.out.println(i);
}

// 結果
// ↓
//-- getInterfaces --
//interface A1
//interface A2
//-- getGenericInterfaces --
//interface A1
//A2<java.lang.String>

Type getGenericSuperclass ()

このClassオブジェクトによって表されるエンティティ(クラス、インタフェース、プリミティブ型またはvoid)の直接スーパークラスを表すTypeを返します。

class A<T> {
}

class B extends A<String> {
}

final var cls = B.class;

System.out.println(cls.getSuperclass()); // class A
System.out.println(cls.getGenericSuperclass()); // A<java.lang.String>

Class<?>[] getInterfaces ()

このClassオブジェクトが表すクラスまたはインタフェースによって直接実装されたインタフェースを返します。

このメソッドの使用例は、getGenericInterfaces() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Method getMethod (String name, Class<?>... parameterTypes)

このClassオブジェクトが表すクラスまたはインタフェースの、指定されたpublicメンバー・メソッドをリフレクトするMethodオブジェクトを返します。

このメソッドの使用例は、getDeclaredMethod(String name, Class<?>... parameterTypes) にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Method[] getMethods ()

この Classオブジェクトによって表されるクラスまたはインタフェースのすべてのpublicメソッドをリフレクトするMethodオブジェクトを格納している配列を返します。これには、クラスまたはインタフェースで宣言されたもの、およびスーパー・クラスやスーパー・インタフェースから継承されたものも含まれます。

このメソッドの使用例は、getDeclaredMethods() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

int getModifiers ()

このクラスまたはインタフェースのJava言語修飾子を整数型に符号化して返します。

public class A {
}

protected class B {
}

private class C {
}

class D {
}
final var a = A.class.getModifiers();
System.out.println(a); // 1
System.out.println(Modifier.isPublic(a)); // true

final var b = B.class.getModifiers();
System.out.println(b); // 4
System.out.println(Modifier.isProtected(b)); // true

final var c = C.class.getModifiers();
System.out.println(c); // 2
System.out.println(Modifier.isPrivate(c)); // true

final var d = D.class.getModifiers();
System.out.println(d); // 0

Module getModule ()

このクラスまたはインタフェースがメンバーであるモジュールを返します。

final var cls = Object.class;

System.out.println(cls.getModule()); // module java.base
System.out.println(cls.getPackage()); // package java.lang
final var cls = Node.class;

System.out.println(cls.getModule()); // module java.xml
System.out.println(cls.getPackage()); // package org.w3c.dom

String getName ()

このClassオブジェクトによって表されるエンティティ(クラス、インタフェース、配列クラス、プリミティブ型またはvoid)の名前を返します。

このメソッドの使用例は、getCanonicalName() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Class<?> getNestHost ()

このClassオブジェクトが表すクラスまたはインタフェースが属する「ネスト」のネストされたホストを返します。

public class NestTest {

    class Foo {
    }

    class Bar {
    }

    public static void main(String[] args) {

        System.out.println("host : " + Foo.class.getNestHost());

        System.out.println("-- member --");
        for (final var member : Bar.class.getNestMembers()) {
            System.out.println(member);
        }

        // 結果
        // ↓
        //host : class NestTest
        //-- member --
        //class NestTest
        //class NestTest$Bar
        //class NestTest$Foo
    }
}

Class<?>[] getNestMembers ()

このClassオブジェクトが属する、ネストされたクラスまたはインタフェースのメンバーであるすべてのクラスおよびインタフェースを表すClassオブジェクトを含む配列を返します。

このメソッドの使用例は、getNestHost() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Package getPackage ()

このクラスのパッケージを取得します。

final var cls = Object.class;

System.out.println(cls.getPackage()); // package java.lang
System.out.println(cls.getPackageName()); // java.lang
final var cls = Node.class;

System.out.println(cls.getPackage()); // package org.w3c.dom
System.out.println(cls.getPackageName()); // org.w3c.dom

String getPackageName ()

完全修飾パッケージ名を返します。

このメソッドの使用例は、getPackage() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Class<?>[] getPermittedSubclasses ()

このクラスまたはインタフェースがシールされている場合、このクラスまたはインタフェースの拡張または実装を許可された直接のサブインタフェースまたはサブクラスを表すClassオブジェクトを含む配列を返します。

sealed class A permits B1, B2 {
}

final class B1 extends A {
}

final class B2 extends A {
}
final var cls = A.class;

for (final var c : cls.getPermittedSubclasses()) {
    System.out.println(c);
}

// 結果
// ↓
//class B1
//class B2

ProtectionDomain getProtectionDomain ()

このクラスのProtectionDomainを返します。

final var cls = String.class;

System.out.println(cls.getProtectionDomain());

// 結果
// ↓
//ProtectionDomain  null
// null
// <no principals>
// java.security.Permissions@4f0f2942 (
// ("java.security.AllPermission" "<all permissions>" "<all actions>")
//)

RecordComponent[] getRecordComponents ()

このレコード・クラスのすべてのレコード・コンポーネントを表すRecordComponentオブジェクトの配列を返します。このクラスがレコード・クラスでない場合はnullを返します。

record Foo(int num, String str) {
}

final var cls = Foo.class;

for (final var component : cls.getRecordComponents()) {
    System.out.println(component);
}

// 結果
// ↓
//int num
//java.lang.String str

URL getResource (String name)

指定された名前のリソースを探します。

// ResourceTest.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ResourceTest {

    public static void main(String[] args) {

        final var cls = ResourceTest.class;

        final var url = cls.getResource("/res/aaa.txt");
        if (url == null) {
            System.out.println("Not found!");
            return;
        }

        System.out.println("url : " + url);

        try (final var reader = new BufferedReader(
                new InputStreamReader(url.openStream()))) {

            reader.lines().forEach(line -> System.out.println("line : " + line));

        } catch (IOException e) {
            System.out.println(e);
        }

        // --- PowerShell ---
        //PS R:\java-work> tree /F
        //...
        //R:.
        //│  ResourceTest.java
        //│
        //└─res
        //        aaa.txt
        //
        //PS R:\java-work> cat .\res\aaa.txt
        //abcd
        //
        //PS R:\java-work> java .\ResourceTest.java
        //url : file:/R:/java-work/res/aaa.txt
        //line : abcd
    }
}

InputStream getResourceAsStream (String name)

指定された名前のリソースを探します。

// ResourceTest2.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ResourceTest2 {

    public static void main(String[] args) {

        final var cls = ResourceTest2.class;

        final var is = cls.getResourceAsStream("/res/aaa.txt");
        if (is == null) {
            System.out.println("Not found!");
            return;
        }

        try (final var reader = new BufferedReader(new InputStreamReader(is))) {

            reader.lines().forEach(line -> System.out.println("line : " + line));

        } catch (IOException e) {
            System.out.println(e);
        }

        // --- PowerShell ---
        //PS R:\java-work> tree /F
        //...
        //R:.
        //│  ResourceTest2.java
        //│
        //└─res
        //        aaa.txt
        //
        //PS R:\java-work> cat .\res\aaa.txt
        //abcd
        //
        //PS R:\java-work> java .\ResourceTest2.java
        //line : abcd
    }
}

Object[] getSigners ()

このクラスの署名者を取得します。

final var cls = Object.class;

final var ret = cls.getSigners();
System.out.println(Arrays.toString(ret)); // null

String getSimpleName ()

ソース・コード内で指定されたとおり、基本となるクラスの単純名を返します。

このメソッドの使用例は、getCanonicalName() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

Class<? super T> getSuperclass ()

このClassで表されるエンティティ(クラス、インタフェース、プリミティブ型またはvoid)の直接スーパークラスを表すClassを返します。

このメソッドの使用例は、getGenericSuperclass() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getTypeName ()

このクラスまたはインタフェースの名前の情報文字列を返します。

System.out.println(Object.class.getTypeName()); // java.lang.Object
System.out.println(int.class.getTypeName()); // int
System.out.println(String[].class.getTypeName()); // java.lang.String[]

TypeVariable<Class<T>>[] getTypeParameters ()

GenericDeclarationオブジェクトによって表されるジェネリック宣言で宣言された型変数を表すTypeVariableオブジェクトの配列を宣言順に返します。

class Foo<T, R, U> {
}

final var cls = Foo.class;

System.out.println("-- for --");
for (final var param : cls.getTypeParameters()) {
    System.out.println(param);
}

// 結果
// ↓
//-- for --
//T
//R
//U

boolean isAnnotation ()

このClassオブジェクトが注釈インタフェースを表す場合はtrueを返します。

class Foo {
}

@interface Bar {
}
System.out.println(Foo.class.isAnnotation()); // false
System.out.println(Bar.class.isAnnotation()); // true

System.out.println(String.class.isAnnotation()); // false
System.out.println(Override.class.isAnnotation()); // true

boolean isAnnotationPresent (Class<? extends Annotation> annotationClass)

指定された型の注釈がこの要素に存在する場合はtrueを返し、そうでない場合はfalseを返します。

@Retention(RetentionPolicy.RUNTIME)
@interface Foo {
}

@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
}
@Foo
class A {
}

final var cls = A.class;

System.out.println(cls.isAnnotationPresent(Foo.class)); // true
System.out.println(cls.isAnnotationPresent(Bar.class)); // false

boolean isAnonymousClass ()

基本となるクラスが匿名クラスである場合だけtrueを返します。

final var r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Run!");
    }
};

final Runnable r2 = () -> System.out.println("Run!");

System.out.println(r1.getClass().isAnonymousClass()); // true
System.out.println(r2.getClass().isAnonymousClass()); // false

System.out.println(String.class.isAnonymousClass()); // false
System.out.println(int.class.isAnonymousClass()); // false

boolean isArray ()

このClassオブジェクトが配列クラスを表すかどうかを判定します。

System.out.println(String[].class.isArray()); // true
System.out.println(int[].class.isArray()); // true

System.out.println(Object.class.isArray()); // false
System.out.println(Runnable.class.isArray()); // false

boolean isAssignableFrom (Class<?> cls)

このClassオブジェクトが表すクラスまたはインタフェースが、指定されたClassパラメータが表すクラスまたはインタフェースと等しいかどうか、あるいはそのスーパー・クラスあるいはスーパー・インタフェースであるかどうかを判定します。

class A {
}

class B extends A {
}

System.out.println(A.class.isAssignableFrom(A.class)); // true

System.out.println(A.class.isAssignableFrom(B.class)); // true
System.out.println(B.class.isAssignableFrom(A.class)); // false
interface A {
}

class B implements A {
}

System.out.println(A.class.isAssignableFrom(B.class)); // true
System.out.println(B.class.isAssignableFrom(A.class)); // false

boolean isEnum ()

このクラスがソース・コードでenumとして宣言された場合だけtrueを返します。

enum Foo {
    A1,
    A2
}

System.out.println(Foo.class.isEnum()); // true
System.out.println(String.class.isEnum()); // false
System.out.println(int.class.isEnum()); // false

boolean isHidden ()

基礎となるクラスが非表示クラスである場合にのみ、trueを返します。

// --- PowerShell ---
//PS R:\java-work> cat .\HiddenTest.java
//public class HiddenTest {
//}
//
//PS R:\java-work> javac .\HiddenTest.java

final var file = Path.of("R:", "java-work", "HiddenTest.class");
final var bytes = Files.readAllBytes(file);

final var lookup = MethodHandles.lookup();

final var cls = lookup.defineHiddenClass(bytes, false).lookupClass();
System.out.println(cls.isHidden()); // true
System.out.println(String.class.isHidden()); // false
System.out.println(int.class.isHidden()); // false

boolean isInstance (Object obj)

指定されたObjectが、このClassが表すオブジェクトと代入互換の関係にあるかどうかを判定します。

class Foo {
}

class Bar extends Foo {
}

final var foo = new Foo();
final var bar = new Bar();

System.out.println(Foo.class.isInstance(foo)); // true
System.out.println(Foo.class.isInstance(bar)); // true

System.out.println(Bar.class.isInstance(foo)); // false
System.out.println(Bar.class.isInstance(bar)); // true

boolean isInterface ()

このClassオブジェクトがインタフェース・タイプを表すかどうかを判定します。

interface Foo {
}

class Bar {
}

System.out.println(Foo.class.isInterface()); // true
System.out.println(Bar.class.isInterface()); // false

System.out.println(String.class.isInterface()); // false
System.out.println(int.class.isInterface()); // false

boolean isLocalClass ()

基本となるクラスがローカル・クラスである場合だけtrueを返します。

class Foo {

    void aaa() {

        System.out.println("Foo : " + Foo.class.isLocalClass());

        class Bar {
        }

        System.out.println("Bar : " + Bar.class.isLocalClass());
    }
}
new Foo().aaa();

// 結果
// ↓
//Foo : false
//Bar : true

boolean isMemberClass ()

基本となるクラスがメンバー・クラスである場合だけtrueを返します。

public class MemberClassTest {

    public class Foo {
    }

    public interface Bar {
    }
}
System.out.println(MemberClassTest.class.isMemberClass()); // false
System.out.println(MemberClassTest.Foo.class.isMemberClass()); // true
System.out.println(MemberClassTest.Bar.class.isMemberClass()); // true

System.out.println(String.class.isMemberClass()); // false
System.out.println(int.class.isMemberClass()); // false

boolean isNestmateOf (Class<?> c)

指定されたClassが、このClassオブジェクトによって表されるクラスまたはインタフェースをネストしたものであるかどうかを判定します。

class A1 {
    class A2 {
        class A3 {
        }
    }
}
System.out.println(A1.class.isNestmateOf(A1.class)); // true
System.out.println(A1.class.isNestmateOf(A1.A2.class)); // true
System.out.println(A1.class.isNestmateOf(A1.A2.A3.class)); // true
System.out.println(A1.class.isNestmateOf(String.class)); // false

System.out.println(A1.A2.A3.class.isNestmateOf(A1.class)); // true
System.out.println(A1.A2.A3.class.isNestmateOf(A1.A2.class)); // true
System.out.println(A1.A2.A3.class.isNestmateOf(A1.A2.A3.class)); // true
System.out.println(A1.A2.A3.class.isNestmateOf(String.class)); // false

boolean isPrimitive ()

指定されたClassオブジェクトがプリミティブ型を表すかどうかを判定します。

System.out.println(int.class.isPrimitive()); // true
System.out.println(int[].class.isPrimitive()); // false

System.out.println(String.class.isPrimitive()); // false
System.out.println(Runnable.class.isPrimitive()); // false

boolean isRecord ()

このクラスがレコード・クラスである場合のみ、trueを返します。

record Foo() {
}

class Bar {
}

interface Baz {
}

System.out.println(Foo.class.isRecord()); // true
System.out.println(Bar.class.isRecord()); // false
System.out.println(Baz.class.isRecord()); // false

System.out.println(int.class.isRecord()); // false
System.out.println(Foo[].class.isRecord()); // false

boolean isSealed ()

このClassオブジェクトがシール済クラスまたはインタフェースを表す場合にのみ、trueを返します。

sealed class A permits B {
}

final class B extends A {
}

class C {
}
System.out.println(A.class.isSealed()); // true
System.out.println(B.class.isSealed()); // false
System.out.println(C.class.isSealed()); // false

System.out.println(int.class.isSealed()); // false
System.out.println(A[].class.isSealed()); // false

boolean isSynthetic ()

このクラスに合成修飾子ビットが設定されている場合にのみ、trueを返します。

System.out.println(String.class.isSynthetic()); // false
System.out.println(int.class.isSynthetic()); // false

final Runnable r = () -> System.out.println("Run!");
System.out.println(r.getClass().isSynthetic()); // true

T newInstance ()

非推奨。 このメソッドは、チェック例外を含むnullaryコンストラクタによってスローされた例外をすべて伝播します。

非推奨です。

String toGenericString ()

修飾子と型パラメータに関する情報を含む、このClassを記述する文字列を返します。

final var ret1 = String.class.toGenericString();
System.out.println(ret1); // public final class java.lang.String

final var ret2 = Runnable.class.toGenericString();
System.out.println(ret2); // public abstract interface java.lang.Runnable

final var ret3 = DayOfWeek.class.toGenericString();
System.out.println(ret3); // public final enum java.time.DayOfWeek
final var ret1 = int.class.toGenericString();
System.out.println(ret1); // int

final var ret2 = String[].class.toGenericString();
System.out.println(ret2); // java.lang.String[]

String toString ()

オブジェクトを文字列に変換します。

final var ret1 = String.class.toString();
System.out.println(ret1); // class java.lang.String

final var ret2 = Runnable.class.toString();
System.out.println(ret2); // interface java.lang.Runnable

final var ret3 = DayOfWeek.class.toString();
System.out.println(ret3); // class java.time.DayOfWeek
final var ret1 = int.class.toString();
System.out.println(ret1); // int

final var ret2 = String[].class.toString();
System.out.println(ret2); // class [Ljava.lang.String;

関連記事

ページの先頭へ