Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9でStackWalker.getCallerClass()メソッドを使用できるのはいつですか。


Java 9は、 StackWalker APIを使用してスタックトレースをフィルタリングし、遅延アクセスのためのスタックウォーキングの効率的な方法を提供しました。 StackWalkerのオブジェクト スタックをトラバースしてアクセスできるようになります。このクラスには、 walk()などの便利なメソッドが含まれています。 、 forEach() 、および getCallerClass()

getCallerClass() methodは、このメソッドを呼び出すメソッドを呼び出すクラスを返します。クラスインスタンスの呼び出しを取得するには、 RETAIN_CLASS_REFERENCEが必要です。 StackWalkerインスタンスを取得している間。 RETAIN_CLASS_REFERENCE StackWalkerによってウォークされたすべてのクラスのインスタンスを保持します。

構文

public Class<?> getCallerClass()

import java.lang.StackWalker.Option;

public class StackWalkerTest {
   public static void main(String args[]) {
      StackWalkerTest1.test1();
   }
}

class StackWalkerTest1 {
   protected static void test1() {
      StackWalkerTest2.test2();
   }
}

class StackWalkerTest2 {
   protected static void test2() {
      System.out.println(StackWalker.getInstance(Option.RETAIN_CLASS_REFERENCE).getCallerClass());
   }
}

出力

class StackWalkerTest1

  1. Javaでpack()メソッドを使用できるのはいつですか?

    pack() メソッドはウィンドウで定義されています Javaのクラスであり、すべてのコンテンツが適切なサイズ以上になるようにフレームのサイズを設定します。 pack()の代替 メソッドは、 setSize()を呼び出して、フレームサイズを明示的に確立することです。 またはsetBounds() メソッド。通常、 pack()を使用します setSize()よりもメソッドを呼び出す方が望ましい パックはフレームレイアウトマネージャーにフレームサイズを任せ、レイアウトマネージャーはプラットフォームの依存関係やコンポーネントサイズに影響を与えるその他の要因にうまく適応できるためです。 構文 p

  2. 抽象クラスを使用する場合とJavaでインターフェイスを使用する場合

    インターフェイスはコントラクトの動作を定義するために使用でき、2つのシステム間のコントラクトとして機能して相互作用することもできますが、抽象クラスは主にサブクラスのデフォルトの動作を定義するために使用されます。つまり、すべての子クラスが同じ機能を実行する必要があります。 抽象クラスを使用する場合 抽象クラスは、派生クラスに共通の基本クラスの実装を提供するため、継承の概念を使用している場合に適しています。 非公開メンバーを宣言する場合は、抽象クラスも適しています。インターフェイスでは、すべてのメソッドがパブリックである必要があります。 将来、新しいメソッドを追加したい場合は、抽象クラスの方が