【问题标题】:Comparing modifiers in Java比较Java中的修饰符
【发布时间】:2013-06-19 19:12:27
【问题描述】:

在 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

【问题讨论】:

    标签: java reflection modifiers


    【解决方案1】:

    Modifier.toString() 方法呢?

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

    例如

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

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

    【讨论】:

    • 完全忘记了toString()。你说得对,这正是我要找的。​​span>
    【解决方案2】:

    由于它是带标志的 int,您可以通过位操作来比较它们。

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

    然后就可以通过Modifier方法查询only1only2了。

    【讨论】:

    • 问题是我仍然不知道修饰符到底是什么,并且必须调用所有Modifier.isWhatever 函数。我认为我只是在拐弯抹角,我认为没有办法解决。
    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多