这可能会被投票,但这个问题从昨天起一直困扰着我......直到我找到一个链接然后我知道我并不是真的疯了哈哈: Enum作为实例变量
我基本上是在问OP的问题.鉴于:
enum Coffee {
BIG,
SMALL }
public class MyClass {
private Coffee coffee;
// Constructor etc.
}
Run Code Online (Sandbox Code Playgroud)
虽然这是Java,但两种语言的枚举确实有所不同,我怎么也不能做咖啡.BIG或coffee.BIG.SMALL(尽管读它时没什么意义,但应该可以考虑咖啡是咖啡类型)在C#?
Jon*_*eet 10
这与枚举无关.这通常与访问静态成员有关.
Java有一个设计缺陷(IMO),它允许您通过该类型的表达式访问静态成员,就像它们是实例成员一样.它可能导致非常混乱的代码:
Thread thread = new Thread(...);
thread.start();
// This looks like it makes the new thread sleep, but it actually makes the
// current thread sleep
thread.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
此外,没有无效检查,因为表达式的值是无关紧要的:
Thread thread = null;
thread.sleep(1000); // No exception
Run Code Online (Sandbox Code Playgroud)
现在,考虑枚举值是隐式静态的,你可以看出为什么存在差异.
事实上,你已经承认"在阅读它时没有多大意义"这表明你内心同意这是Java中的一个缺陷,而不是在C#中:)
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |