在 Java 中獲取類名

Rupam Yadav 2023年1月30日 2021年10月2日
  1. 在 Java 中使用 class.getSimpleName() 獲取類名
  2. 使用 getName() 獲取匿名類的類名
  3. 使用 Thread.currentThread().getStackTrace()[1].getClassName() 獲取類的名稱
在 Java 中獲取類名

本教程教授如何使用四種方法在 Java 中獲取類名。在很多情況下,我們可能希望在 Java 中獲取類名。

在 Java 中使用 class.getSimpleName() 獲取類名

這是獲取類名最常用的方法。在下面的示例中,我們有兩個類:帶有 main() 方法的 GetClassName,另一個類是 ExampleClass

GetClassName 類中,我們使用 ExampleClass.class 來獲取該類的資訊。它返回一個 ExampleClass 型別的 Class 例項。現在我們可以使用 classNameInstance 呼叫 getSimpleName(),它將僅以字串形式返回類名。

public class GetClassName {
    public static void main(String[] args) {

        Class<ExampleClass> classNameInstance = ExampleClass.class;
        String className = classNameInstance.getSimpleName();
        System.out.println(className);

    }
}

class ExampleClass {
    private void exampleFun() {
        System.out.println("Just a function in a class");
    }
}

輸出:

ExampleClass

使用 getName() 獲取匿名類的類名

沒有任何名稱的內部類稱為匿名類。在此示例中,我們將學習如何獲取匿名類的名稱或檢查類是否具有匿名類。下面,我們建立一個介面 Example 來例項化匿名類。在 GetClassName 中,我們使用介面例項化沒有名稱的類並實現函式 printMessage()

為了獲得類名,我們使用 example.getClass(),但由於沒有類名,我們得到了一個 Class<?> 型別的例項。然後我們使用 classNameInstace 來呼叫返回類名的 getName()。如輸出所示,我們獲得了附加了 $1 的父類名稱 GetClassName,代表匿名類。

interface Example {
    void printMessage();
}

public class GetClassName {
    public static void main(String[] args) {

        Example example = new Example() {
            @Override
            public void printMessage() {

                System.out.println("This is an anonymous inner class");
            }
        };

        Class<?> classNameInstance = example.getClass();

        String className = classNameInstance.getName();

        System.out.println(className);

    }
}

輸出:

GetClassName$1

使用 Thread.currentThread().getStackTrace()[1].getClassName() 獲取類的名稱

在最後一個示例中,我們使用 Thread 類使用 currentThread() 獲取當前正在執行的執行緒,這使我們可以訪問堆疊轉儲和執行緒中的所有呼叫。getStackTrace() 返回一個堆疊元素陣列,我們從中獲取陣列的第二項並呼叫 getClassName() 以獲取呼叫的類名。

public class GetClassName {
    public static void main(String[] args) {

        String simpleClassName = Thread.currentThread().getStackTrace()[1].getClassName();

        System.out.println("Class name: " + simpleClassName);

    }
}

輸出:

Class name: GetClassName
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

相關文章 - Java Class