2016-05-15 97 views
0

我学习反思,我发现了一些片段,看起来像这样:表达式“m | = Modifier.PUBLIC”是什么意思,以及为什么要这样做?

private static int modifierFromString(String s) { 
    int m = 0x0; 
    if ("public".equals(s))   m |= Modifier.PUBLIC; 
    else if ("protected".equals(s)) m |= Modifier.PROTECTED; 
    else if ("private".equals(s))  m |= Modifier.PRIVATE; 
    else if ("static".equals(s))  m |= Modifier.STATIC; 
    else if ("final".equals(s))  m |= Modifier.FINAL; 
    else if ("transient".equals(s)) m |= Modifier.TRANSIENT; 
    else if ("volatile".equals(s)) m |= Modifier.VOLATILE; 
    return m; 
} 

我很困惑,什么是m |= Modifier.PUBLIC意味着,我可以使用m = Modifier.PUBLIC

+0

这是一个[按位或](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html),它用于组合多个值。但在这种情况下,每个结果都在一个单独的'else'中,因此您可以按照您的建议在技术上对其进行修改。我真的有点惊讶地看到[官方教程]中的代码(https://docs.oracle.com/javase/tutorial/reflect/member/fieldModifiers.html)。 – shmosel

+0

'| ='是一个复合赋值运算符,结合了'='(赋值)和'|'(按位或)。 – Andreas

回答

2

m |= Modifier.PUBLIC;相当于m = m | Modifier.PUBLIC;,这意味着你执行按位或mModifier.PUBLIC和结果分配回m

因为你的方法执行只是一个这样的分配mm被初始化为0,你可以用简单的赋值(m = Modifier.PUBLIC;)替换它,并得到相同的输出。

+2

或者只是'返回'并摆脱'm'。而这些天,'if'可以成为'switch'。 – Andreas