web-dev-qa-db-ja.com

Java関数(メソッド)どこでも利用可能(グローバル)

私は最近(4日前)Javaでプログラミングを始めました。私はC++とPHPからの全体的なプログラミング経験があります。私の質問は、すべてのクラスで使用できるJavaで関数を実装できるかどうかです。いくつかの場所(ログイベント、エラーなど)で呼び出す必要があるグローバルロギング関数について考えています。

AとBの2つのクラスがあるとします。両方でロギング関数を呼び出す必要がありますが、関数本体全体をコピーしたくないので(信じられないほど)、厳密に呼び出したい(別のクラスを作成せずに)クラス、それをインスタンス化してから、インスタンスから呼び出します)、logEvent(someVariable)のように。したがって、AとBが拡張する抽象クラスCを使用する必要がありますが、それらはすでに他のクラス(組み込み)の拡張です。多重継承は許可されていないので(そうですか?)、私はいくつかのトリックを行う必要があります。シングルトンも私を喜ばせていません。 PHPまたはC++では、関数本体を使用して別のファイルを作成し、それをインクルードします。

これが私がそれをどのように使いたいかです:

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}

public class B extends SomeOtherClass {
    String error = "Error from class B";
    logEvent(error);
}
12
Mars

任意のクラス(utilsクラスなど)に静的メソッドを配置し、次のように呼び出します。ClassName.functionName()

静的メソッドはクラスのインスタンスではなくクラスに属しているため、メソッドにアクセスするためにクラスをインスタンス化する必要はありません。

ただし、Javaはすべてクラスに含まれている必要があるため、クラス名がないとアクセスできません。

32
Vyassa Baratham

静的メソッドを使用する必要があります。

package xxx;

public class Util{
    public static void logEvent(String error){
    ...
    }
}

静的インポート:

import static xxx.Util.*;

public class A extends SomeClass {
    String error = "Error from class A";
    logEvent(error);
}
12
user2952801

静的メソッドを使用できます。

静的メソッドを使用してクラスを定義します。

public class Util{
    public static void logEvent(String error){
        ...
    }
}

次に、次のように静的メトッドを使用できます。

public class A extends SomeClass {
    String error = "Error from class A";
    Util.logEvent(error);
}

静的メソッドの詳細については、こちらをご覧ください http://www.leepoint.net/notes-Java/flow/methods/50static-methods.html

1
Jacky