比较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

现在最简单的方法就是使用大量的if修饰符。isAbstract,修饰符。isPublic等等。但是有没有更干净的方法呢?

编辑:最后我想要两个列表。一个说Foo有Bar没有的东西,另一个说Bar有Foo没有的东西。在这个例子中,我想要:

FooHasBarDoesnt: public, final
BarHasFooDoesnt: private

Modifier.toString()方法呢?

返回描述指定修饰符中的访问修饰符标志的字符串。

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

这个列表看起来像- [public, final]

因为它是带标志的整型,所以可以通过位运算对它们进行比较。

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

则可以通过Modifier的方法查询only1only2

相关内容

  • 没有找到相关文章

最新更新