當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java java.lang.reflect.Constructor用法及代碼示例


java.lang.reflect.Constructor 類用於管理構造函數元數據,例如構造函數的名稱、構造函數的參數類型和構造函數的訪問修飾符。我們可以在運行時檢查類的構造函數並實例化對象。 Constructor[] 數組將為類中聲明的每個公共構造函數提供一個 Constructor 實例。

為了獲取Constructor對象,可以從Class對象中獲取Constructor類對象。

參數:T- 聲明構造函數的類

實現的接口如下:

  • AnnotatedElement
  • GenericDeclaration
  • Member

示例:

Class aClass = Employee.class;
Constructor[] constructors = aClass.getConstructors();

先決條件:

讓我們討論一些獲取構造函數信息的方法

  1. Type.GetConstructors()可以獲取相應類中的所有公共構造函數。它返回一個構造函數數組。
  2. Class getDeclaredConstructors() 無論 public 關鍵字如何,都可以獲取相應類中的所有構造函數。
  3. getName():一個可以得到 相應構造函數的名稱。
  4. getModifiers(): 以整數形式返回由此 Constructor 對象表示的構造函數的 Java 語言修飾符。應該使用 Modifier 類來解碼修飾符。
  5. getParameterTypes(): 返回 特定構造函數的參數類型。

此外,該類的主要方法以表格形式給出如下:

方法 說明
equals(Object obj) 將此構造函數與指定對象進行比較。
Constructor getAnnotatedReceiverType() 返回一個 AnnotatedType 對象,該對象表示使用類型來指定此可執行對象表示的方法/構造函數的接收者類型。
getAnnotatedReturnType() 返回一個 AnnotatedType 對象,該對象表示使用類型來指定此可執行文件表示的方法/構造函數的返回類型。
Class getAnnotation() 如果存在指定類型的該元素的注釋,則返回該元素的注釋,否則返回 null。
getDeclaredAnnotations() 返回直接出現在該元素上的注釋。
getDeclaringClass() 返回表示聲明此對象表示的可執行文件的類或接口的 Class 對象。
getExceptionTypes() 返回 Class 對象的數組,這些對象表示聲明為由該對象表示的底層可執行文件引發的異常類型。
getGenericExceptionTypes() 返回 Type 對象的數組,這些對象表示聲明為此可執行對象引發的異常。
Constructor getGenericParameterTypes() 返回 Type 對象的數組,這些對象按聲明順序表示由此對象表示的可執行文件的形式參數類型。
hashcode() 返回此構造函數的哈希碼
isSynthetic() 如果此構造函數是合成構造函數,則返回 true
isVarArgs() 如果此構造函數被聲明為采用可變數量的參數,則返回 true
toGenericString() 返回說明此構造函數的字符串
toString() 返回說明此構造函數的字符串

例子:

Java


// Java program to show uses of Constructor class
// present in java.lang.reflect package
// Importing package to that examine and
// introspect upon itself
import java.lang.reflect.*;
// Class 1
// Helper class
class Employee {
    // Member variables of this class
    int empno;
    String name;
    String address;
    // Constructor of this class
    // Constructor 1
    public Employee(int empno, String name, String address)
    {
        // 'this' keyword refers to the
        // current object itself
        this.empno = empno;
        this.name = name;
        this.address = address;
    }
    // Constructor 2
    public Employee(int empno, String name)
    {
        this.empno = empno;
        this.name = name;
    }
    // Constructor 3
    private Employee(String address)
    {
        this.address = address;
    }
    // Constructor 4
    protected Employee(int empno) { this.empno = empno; }
}
// Class 2
// Main class
public class GFG {
    // Main driver method
    public static void main(String args[])
    {
        // Creating an object of above class
        // in the main() method
        Class c = Employee.class;
        // Display message
        System.out.println("All public constructor are :");
        Constructor[] cons = c.getConstructors();
        for (Constructor con : cons)
            // It will return all public constructor
            System.out.print(con.getName() + " ");
        // Display message for better readability
        System.out.println(
            "\n\nAll  constructor irrespective of access modifiers");
        // Getting constructors of this class
        // using getDeclaredConstructors() method
        cons = c.getDeclaredConstructors();
        // Iterating to print all constructors
        for (Constructor con : cons)
            System.out.print(con.getName() + " ");
        // Display message
        System.out.println(
            "\n\naccess modifiers of each constructor");
        // Iterating to get all the access modifiers
        for (Constructor con : cons)
            // Print all the access modifiers for all
            // constructors
            System.out.print(
                Modifier.toString(con.getModifiers())
                + " ");
        // Parameters types
        // Display message only
        System.out.println(
            "\n\ngetting parameters type of each constructor");
        // Iterating to get parameter types of each
        // constructor using for-each loop
        for (Constructor con : cons) {
            Class[] parameratertypes
                = con.getParameterTypes();
            for (Class c1 : parameratertypes) {
                // Print and display parameter types of all
                // constructors
                System.out.print(c1.getName() + " ");
            }
            // Here we are done with inner loop
            // New line
            System.out.println();
        }
    }
}
輸出
All public constructor are :
Employee Employee 

All  constructor irrespective of access modifiers
Employee Employee Employee Employee 

access modifiers of each constructor
protected private public public 

getting parameters type of each constructor
int 
java.lang.String 
int java.lang.String 
int java.lang.String java.lang.String 


相關用法


注:本文由純淨天空篩選整理自kapilnama1998大神的英文原創作品 java.lang.reflect.Constructor Class in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。