-1
/**
 * this is my class, yadayada. Needs to be subclassed to be useful.
 */
public abstract class MyClass {
  ...
  public static void myMethod() {
    // What is the name of the subclass that's using this?
    System.out.println("Called from class " + this.getClass().class.getName());
    // Doesn't work because there's no "this" in a static method.
  }
}

編集:これが私がしたいことです:

public class FooClass extends MyClass {
  ...
}

FooClass.myMethod();   // I would like this to print "Called from class FooClass"

私はすべてのアイデアがありません。

編集:そして、なぜ私がこのようにしているのか疑問に思っている人のために、それは実際には一種のAndroidの問題です.

Android では、BroadcastReceiver というクラスが定義されています。これをサブクラス化し、サブクラスをシステムに登録します。適切なブロードキャストが送信されると、システムはサブクラスのインスタンスを作成し、そのメソッドの 1 つを呼び出します。

自分自身を登録するための静的メソッドを含む独自の BroadcastReceiver サブクラスを作成したいと考えています。しかし、サブクラス化も可能にしたいです。次のようになります。

/**
 * My special-purpose BroadcastReceiver.  Subclass this to use it.
 */
public class MyClass extends BroadcastReceiver {
  public static scheduleAnAlarm(long when) {
    // do some class-specific stuff
    AlarmManager.scheduleBroadcast(MyClass.class, when);
  }

  public void onBroadcast() {
    System.out.println("You should subclass MyClass for it to be useful");
  }
}

私の問題は、MyClass ではなく、インスタンス化するサブクラスを登録したいということです。

4

5 に答える 5

6

できません。classつまり、メソッドからサブクラスの を取得することはできませんstatic

Java がクラスのメソッドを呼び出す場合static(たとえabstract. したがって、取得するサブクラスが必ずしも存在するとは限りません。あったとしても、複数のサブクラスが存在する可能性があるため、Java はどのサブクラスが必要かをどのように決定できるのでしょうか?

編集しても、編集してもサブクラスを取得できません。呼び出し元のクラスを取得するために、例外で使用できるトリックがあります。例外をスロー/キャッチしてから、スタック トレースを 1 レベル下に移動して、呼び出し元のメソッド/クラスを取得できます。お勧めしません!

于 2012-10-26T15:58:43.220 に答える
0
public class Foo extends MyClass{

    public static void main(String[] args) {
        myMethod();
    }
}

public abstract class MyClass{

    public static void myMethod() {

        System.out.println("Called from class " + MyClass.class.getName());

    }
}
于 2012-10-26T16:08:04.680 に答える
0

クラス名が必要だと思いますが、以下のようなものがうまくいくかもしれません:

 System.out.println("Called from class " + MyClass.class.getName());
于 2012-10-26T15:58:26.340 に答える
0

thisそこにアクセスできるクラスインスタンスは静的コンテキストでは機能しませんMyClass.class

于 2012-10-26T15:58:36.350 に答える
0

MyClass.class.getName() はどうですか?

于 2012-10-26T15:59:29.700 に答える