鉴于以下枚举:
enum Repeat {
Daily,
Weekly,
Yearly
}
我意识到我们能够这样写:
Repeat repeat = Repeat.Daily.Weekly.Yearly.Weekly;
相当于:
Repeat repeat = Repeat.Weekly;
我可以知道为什么允许这样的语法吗?有没有办法让编译器警告我们不要这样做?
答案 0 :(得分:19)
允许Daily, Weekly, Yearly
static
default
enum
Repeat
字段"The static field Repeat.Weekly should be accessed in a static way"
{}} class Foo{
public static Foo obj1 = new Foo();
public static Foo obj2 = new Foo();
public static Foo obj3 = new Foo();
}
Foo f = Foo.obj1.obj2.obj3; // will work fine but you will get a warning from the compiler.
。此外,您将收到编译器Repeat
的警告。它类似于下面的代码行。
Enum
以下是static
枚举的字节码检查的一部分,从中可以清楚地看出 0: new #1 // class com/java8/demo/Repeat
3: dup
4: ldc #14 // String Daily
6: iconst_0
7: invokespecial #15 // Method "<init>":(Ljava/lang/String;I)V
10: putstatic #19 // Field Daily:Lcom/java8/demo/Repeat;
13: new #1 // class com/java8/demo/Repeat
变量是const walls = Rx.Observable
.range(1, 10)
.map(() => {
return {
x: helper.randomIntFromZero(canvas.width - wallWidth),
y: helper.randomIntFromZero(canvas.height - wallHeight)
};
})
const player = move.map(
e => {
const coords = { x: 0, y: 0 }
if (e.keyCode == 37) {
coords.x -= (player.x <= 0) ? 0 : deltaCoord;
}
if (e.keyCode == 38) {
coords.y -= (player.y <= 0) ? 0 : deltaCoord;
}
if (e.keyCode == 39) {
coords.x += (player.x + player.width >= canvas.width) ? 0 : deltaCoord;
}
if (e.keyCode == 40) {
coords.y += (player.y + player.width >= canvas.height) ? 0 : deltaCoord;
}
return coords;
}
)
.startWith({ x: 0, y: 0 })
并且保存了Enum本身的对象。
Rx.Observable.combineLatest((player, walls) => {
console.log(player, walls);
})
.subscribe((player, walls) => {
console.log('player', player);
console.log('walls', walls);
});
答案 1 :(得分:5)
枚举实例只是枚举类的line=1 #initialize your variable at 1
for td in allrows1:
td=td.text
print (td)
ws.cell(row=line, column=1, value=ta) # change 1 with line
line += 1 # add one to line for the next iteration
实例。
我们有两种方法来访问类的静态字段:
当你链接你的枚举时:
static
就像从类的实例中获取静态字段一样。
答案 2 :(得分:2)
答案 3 :(得分:1)
枚举文字是静态成员,每个静态成员都可以使用类引用访问它们:
TypeName.staticMember
TypeName.staticMethod()
或者在一个实例上:
new TypeName().staticMember
new TypeName().staticMethod()
不建议采用第二种方法(编译器会发出警告)
由于枚举文字只是静态成员,Repeat.Daily.Weekly.Yearly.Weekly
就像上面的第二个代码片段,访问实例引用上的静态成员。
有了一个课程,那就是:
class Type {
static Type INSTANCE1, INSTANCE2, INSTANCE3;
}
可以使用INSTANCE3
获取对Type.INSTANCE1.INSTANCE2.INSTANCE3
的引用。这是有效的,但这是不好的做法。