2

この C 機能を複製する一般的な方法を見つけようとしています。

int main(int argc, char** argv){
    fprintf(2,"%s: error you did something wrong.\n", argv[0]);
    return 1;
}

ジャバで。これまでのところ唯一の方法は、これをアプリにハードコードすることでしたが、これは醜いものでした。次のようなものを取得したい:

someObj.getClass().getSimpleName();

自分のクラスを参照せずに、静的メイン内で。

これは可能ですか?

編集

良い時間を探しても、これは見つかりませんでした。

重複した質問です。Java で $0 (プログラム名) を参照してください。メインクラスを発見?答えのために

4

3 に答える 3

0

これは不可能だと思います。これを印刷する最も簡単な方法は、MyClass.class.getSimpleName()を使用することです。または、Throwableを作成(スローしない)して、スタックトレースを印刷し、そこから移動することもできます。

于 2009-04-05T00:09:19.663 に答える
0

Java が実行するクラスを見つける方法はstatic void main()、Java 実行可能ファイル (およびクラスパス) に渡される名前です。したがって、正しい名前が渡されない限り、メインを実行することはできません。

*まあ、見つかったメインが「FooBar.main()」のようなものを呼び出すか、クラスローダーを使用してそれを見つけない限り。

それでも、メインは静的であり、静的関数は仮想ではないため、そのクラスでメインが呼び出されたため、呼び出されたメインが呼び出されます。mainしたがって、コードでは、関数が含まれるクラスの名前だけの名前(引数でメインに渡されません) 。

したがって、エラーは発生しないため、名前を見つける必要はありません。

于 2009-04-04T23:52:30.687 に答える
0

私が考えることができる唯一のことは、どのスレッドがメインスレッドであるかを判断し、そのスレッドのスタックトレースを取得してから、スタックの一番上に戻り、要素のクラス名とメソッド名を調べて、それがそうであるかどうかを確認することです.あなたが欲しいもの。

しかし、それはかなり厄介です。元の要件を再考し、あなたが望むものを達成するためのより簡単な手段がないかどうかを確認します.

于 2009-04-05T00:01:13.520 に答える