0

Java では、リフレクションを使用して、クラスのすべての修飾子を表す整数を取得できます。例えば:

public final class Foo{}
Foo.getClass().getModifiers();//returns 17 because public=1 and final=16

私の質問は、2 つのクラスの修飾子を比較する最良の方法は何ですか? 別のクラスがあるとしましょう:

private class Bar{}
Bar.getClass().getModifiers();//returns 2 because private=2

簡単な方法は、modifier.isAbstract、modifier.isPublic などの多数の if を使用することです。しかし、これを行うよりクリーンな方法はありますか?

編集: 結局、2 つのリストが必要です。1 つは Foo が持っていて Bar が持っていないものを言い、もう 1 つは Bar が持っていて Foo が持っていないものを言います。したがって、この特定のケースでは、次のことが必要です。

FooHasBarDoesnt: public, final
BarHasFooDoesnt: private
4

2 に答える 2

2

Modifier.toString()メソッドはどうですか?

指定された修飾子のアクセス修飾子フラグを説明する文字列を返します。

例えば

List<String> modNames = Arrays.asList(Modifier.toString(mods).split("\\s"));

このリストは - のようになり[public, final]ます。

于 2013-06-19T19:18:31.503 に答える
1

フラグ付きのintなので、ビット操作で比較できます。

int common = flags1 & flags2;
int only1 = flags1 ^ common;
int only2 = flags2 ^ common;

次に、メソッドによってクエリonly1を実行できます。only2Modifier

于 2013-06-19T19:16:40.407 に答える