Java getMethod()

PHPz
リリース: 2024-08-30 15:39:49
オリジナル
1107 人が閲覧しました

Java getMethod() は、指定された Class オブジェクト参照に存在する指定されたパブリック メンバー関数の参照を保持する、パッケージ java.lang.reflect 内の Method クラスのインスタンスを返す java.lang.Class.getMethod() のメソッドです。クラスまたはインターフェイスに。このメソッドは、最初のパラメータとして渡す必要があるメソッドの名前を受け取ります。渡される 2 番目のパラメーターは、返されるメソッドの仮パラメーター データ型を決定する Class のオブジェクトの配列、または paramterType として null を決定する空の配列です。ここで使用される検索アルゴリズムは、プライベート GetPublicMethods() メソッドと同じです。

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

getMethod() は、以下に示す 3 種類の例外をスローします:-

  1. NoSuchMethodException
  2. NullPointerException
  3. セキュリティ例外

構文

以下は java.lang.Class の getMethod の署名です

public Method getMethod(String name, Class<?>... parameterTypes)
throws NoSuchMethodException, SecurityException
ログイン後にコピー
  • public: このキーワードは、指定されたメソッドがプロジェクト内のどのクラスからでもアクセスできることを決定します。
  • 戻り値の型 Method: このメソッドは、名前が引数として渡された必要なメソッドを参照する Method クラスのインスタンスを返します。
  • パラメータ:
  • Name このパラメータは、参照元のクラスまたはインターフェイス オブジェクトに存在するメソッドの名前の文字列表現を参照します。そのようなメソッドがクラスに存在しない場合は、NoSuchMethodException が発生します。それ以外の場合、アルゴリズムが実行され、メソッドが返されます。
  • parameterTypes: これは、name パラメーターのメソッドが引数として必要とするデータを指すクラス型オブジェクトの配列を指します。この配列のサイズは、指定されたメソッド名に必要な引数によって異なります。メソッドに引数が必要ない場合、この引数には null が渡されます。

以下のようなクラスデモがあるとします:

class Demo{
public void method1(String a){
System.out.println(a);
}
}
ログイン後にコピー

getMethod の呼び出しは次のようになります:

Demo demoObj= new Demo();// Object of Demo class
Class cObj= demoObj.getClass()
Class [] carr = new Class[1];
carr[0] = String.class;// class reference to java.lang.String class stored In the array of type Class
Method mObj = cObj.getMethod("method1",carr);
ログイン後にコピー

Java では getMethod() はどのように機能しますか?

getMethod() は、参照元のクラスまたはインターフェイス オブジェクト内の指定されたメソッドに Method インスタンスを返します。

  • 指定されたクラスまたはインターフェイスで見つける必要があるパブリック メソッドの名前を保持する String データ型の name パラメーターを受け取ります。また、探している関数の引数の型を表すクラス オブジェクトの配列も受け取ります。
  • JVM は 2 つの引数を読み取り、java.lang.Class の privateGetPublicMethods() メソッドで使用されるのと同じ検索アルゴリズムを実行し、指定された名前の public メソッドが存在するかどうかを検索します。クラス内に複数のメソッドが存在する場合は、より具体的な戻り値の型を持つメソッドが返されます。それ以外の場合、方法は任意に選択されます。

メソッドが見つかった場合は、その参照を保持するメソッド クラスのインスタンスを返します。

指定されたメソッドに引数が必要ない場合は、parameterType の代わりに null が渡されます。これは、同じ名前で引数の数やデータ型が異なる複数のメソッドがあるメソッドのオーバーロードの場合に役立ちます。このメソッドは 3 種類の例外をスローします:-

1. NoSuchMethodException: このタイプの例外は、JVM がクラスまたはインターフェイスで指定された名前のメソッドを見つけられない場合にスローされます。

2. SecurityException: このタイプの例外は、

の場合にスローされます。
  • checkMemberAccess(this, Member.PUBLIC) が呼び出され、アクセスが拒否されます。
  • 呼び出し元クラスのロードは、現在のクラスの祖先のローダーとは異なります。したがって、SecurityManagers.checkPackageAccess() が呼び出されます。したがって、パッケージへのアクセスは拒否されます。

3. NullPointerException: これは、引数のメソッド名の代わりに null が渡された場合にスローされます。

Java getMethod() の実装例

以下に挙げる例を示します:

例 #1

この例では、Office クラスの 2 つのメソッドへの getMethod 呼び出しの出力を示します。1 つはオブジェクトを必要とし、もう 1 つは引数を必要としません。

//package Proc;
import java.lang.reflect.*;
class Office{
public String OfficeLocation() {
return location;
}
public String getEmpName(Integer eid) {
return"Sergio";
}
String location = "Bangalore";
}
public class prac1 {
public static void main(String[] args) {
Office ofc = new Office();
Class cObj = ofc.getClass();
Class[] carr = new Class[1];
carr[0] = Integer.class;
try {
Method meth = cObj.getMethod("OfficeLocation", null);
System.out.println("Method with specified name is = " + meth.toString());
} catch(NoSuchMethodException e) {
System.out.println(e.toString());
}
try {
Method meth = cObj.getMethod("getEmpName", carr);
System.out.println("Method with specified name is = " + meth.toString());
} catch(NoSuchMethodException e) {
System.out.println(e.toString());
}
}
}
ログイン後にコピー

出力:

Java getMethod()

例 #2

この例では、JVM が指定された名前のクラスであるプライベート メソッドを見つけることができるかどうかを確認します。

//package Proc;
import java.lang.reflect.*;
public class prac1 {
public static void main(String[] args) {
Office ofc = new Office();
Class cObj = ofc.getClass();
try {
Method meth = cObj.getMethod("OfficeLocation", null);
System.out.println("Method with specified name is = " + meth.toString());
} catch(NoSuchMethodException e) {
System.out.println(e.toString());
}
}
}
class Office{
private String OfficeLocation() {
return location;
}
public String getEmpName(Integer eid) {
return "Sergio";
}
String location = "Bangalore";
}
ログイン後にコピー

出力:

Java getMethod()

Example #3

In this example , we will see how different exceptions occur when a non-existing method is called, and null is passed in the method’s name.

//package Proc;
import java.lang.reflect.*;
class Office{
public String OfficeLocation() {
return location;
}
public String getEmpName(Integer eid) {
return "Sergio";
}
String location = "Bangalore";
}
public class prac1 {
public static void main(String[] args) {
Office ofc = new Office();
Class cObj = ofc.getClass();
Class[] carr = new Class[1];
carr[0] = Integer.class;
try {
Method meth = cObj.getMethod("show", null);
System.out.println("Method found " + meth.toString());
} catch(NoSuchMethodException e) {
System.out.println(e.toString());
}
try {
Method meth = cObj.getMethod(null, carr);
System.out.println("Method found" + meth.toString());
} catch(NoSuchMethodException e) {
System.out.println(e.toString());
}catch(NullPointerException e) {
System.out.println(e.toString());
}
}
}
ログイン後にコピー

Output:

Java getMethod()

Conclusion

Java.lang.getMethod() is a method used to search if a method with the given name and type of arguments is present in the class or not. It uses the same algorithm to find the method used in the privateGetPublicMethods() method. JVM search for the given public method and returns a Method instance; otherwise, NoSuchMethodException is raised.

以上がJava getMethod()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート