2013-06-19 55 views
0

在java中,您可以使用反射來獲取表示類中所有修飾符的整數。例如:在Java中比較修飾符

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

我的問題是,什麼是最好的方法來比較兩個類的修飾符?比方說,我們有另一個類:

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

現在簡單的方法是將有一噸IFS說modifier.isAbstract,modifier.isPublic等。但有一個更清潔的方式做到這一點?

編輯:最後我想要兩個列表。一個說Foo有那個Bar沒有的東西,另外一個說Bar是什麼,Foo沒有。所以在這個特殊的情況下,我想:

FooHasBarDoesnt: public, final 
BarHasFooDoesnt: private 

回答

2

那麼Modifier.toString()方法呢?

返回描述指定修飾符中訪問修飾符標誌的字符串。

例如,

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

此列表看起來像 - [public, final]

+0

完全忘了'toString()'。你是對的,這正是我所尋找的。 –

1

因爲它是int與標誌,你可以比較他們的位操作。

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

然後你就可以Modifier方法查詢only1only2

+1

問題是我仍然不知道修飾符是什麼,並且不得不調用所有的'Modifier.isWhatever'函數。我認爲我只是在叢林中跳動,我不認爲有一種解決辦法。 –