我正在编写一个java游戏,它由一块瓷砖组成.我不能直观地定义瓷砖的边缘以及它们如何相互关联,例如为了获得瓷砖的相对边缘,我希望能够只输入TOP.opposite().但是,当使用枚举来定义这些边时,我最终必须在contstructor中至少引用其中两个:
public enum Edge {
TOP(Edge.BOTTOM), //illegal forward reference
BOTTOM(Edge.TOP),
LEFT(Edge.RIGHT), //illegal forward reference
RIGHT(Edge.LEFT);
private Edge opposite;
private Edge(Edge opp){
this.opposite = opp;
}
public Edge opposite(){
return this.opposite;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用枚举来解决这个问题,这很简单?
我已经通过 这个关于前向引用的合法性的问题,但不清楚forward referencesJava语言的含义.有人可以借助一个例子来解释吗?
我有一个枚举,我试图将最终的静态变量作为参数传递给构造函数.问题是枚举中的第一个语句本身必须是一个实例,但在这种情况下,还没有定义最终变量.查看代码,您将了解:
public enum ParseResource {
PUSH(API_URL); //Error: illegal forward reference
private final static String API_URL = "https://api.parse.com/1";
private String url;
private ParseResource(String url) {
this.url = url;
}
}
Run Code Online (Sandbox Code Playgroud)
和另一种选择:
public enum ParseResource {
//Illegal in enums, first statement has to be an instance
private final static String API_URL = "https://api.parse.com/1";
PUSH(API_URL);
private ParseResource(String url) {
this.url = url;
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决?谢谢.
对于如下定义的枚举
public enum Cars {
SWIFT("Maruti"),
DZIRE("Maruti"),
CIAZ("Maruti"),
I10("Hyundai"),
CRETA("Hyundai");
String company;
Cars(String company){
this.company = company;
}
}
Run Code Online (Sandbox Code Playgroud)
声纳错误
Define a constant instead of duplicating this literal "Maruti" 3 times.
如果我们定义静态字符串,它将无法编译
Cannot reference a field before it is defined
解决方案1:
public enum Cars {
SWIFT(CarsString.MARUTI.companyName),DZIRE("Maruti"), I10("Hyundai"), CRETA("Hyundai");
static String MARUTI = "Maruti";
String company;
Cars(String company){
this.company = company;
}
enum CarsString {
MARUTI("maruti"),
HYUNDAI("Hyundai");
String companyName;
CarsString(String companyName){
this.companyName = companyName;
}
}
}
Run Code Online (Sandbox Code Playgroud)
解决方案2:
不知道这是否是我们这样做的方式。当Cars.MARUTI未引用它时,它会出错Cannot reference …