2013-06-19 27 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'函数。我认为我只是在丛林中跳动,我不认为有一种解决办法。 –