0

在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
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;

然后你可以查询only1only2方法Modifier

于 2013-06-19T19:16:40.407 回答