Herbert Schildt 提到,虽然这些方法在技术上没有任何问题, 枚举是更好的选择。
考虑以下因素:
选择1:
//可能答案的枚举。
enum Answers {
NO, YES, MAYBE, LATER, SOON, NEVER
}
public class Question {
Random rand = new Random();
Answers ask() {
int prob = (int) (100 * rand.nextDouble());
if (prob < 15)
return Answers.MAYBE; // 15%
else if (prob < 30)
return Answers.NO; // 15%
else if (prob < 60)
return Answers.YES; // 30%
else if (prob < 75)
return Answers.LATER; // 15%
else if (prob < 98)
return Answers.SOON; // 13%else
return Answers.NEVER; // 2%
}
}
public class AskMe {
static void answer(Answers result) {
switch (result) {
case NO:
System.out.println("No");
break;
case YES:
System.out.println("Yes");
break;
case MAYBE:
System.out.println("Maybe");
break;
case LATER:
System.out.println("Later");
break;
case SOON:
System.out.println("Soon");
break;
case NEVER:
System.out.println("Never");
break;
}
}
public static void main(String args[]) {
Question q = new Question();
answer(q.ask());
answer(q.ask());
answer(q.ask());
answer(q.ask());
}
}
选择2:
public interface SharedConstants {
int NO = 0;
int YES = 1;
int MAYBE = 2;
int LATER = 3;
int SOON = 4;
int NEVER = 5;
}
public class Question implements SharedConstants {
Random rand = new Random();
int ask() {
int prob = (int) (100 * rand.nextDouble());
if (prob < 30)
return NO; // 30%
else if (prob < 60)
return YES; // 30%
else if (prob < 75)
return LATER; // 15%
else if (prob < 98)
return SOON; // 13%
else
return NEVER; // 2%
}
}
public class AskMe implements SharedConstants {
static void answer(int result) {
switch (result) {
case NO:
System.out.println("No");
break;
case YES:
System.out.println("Yes");
break;
case MAYBE:
System.out.println("Maybe");
break;
case LATER:
System.out.println("Later");
break;
case SOON:
System.out.println("Soon");
break;
case NEVER:
System.out.println("Never");
}
}
public static void main(String args[]) {
Question q = new Question();
answer(q.ask());
answer(q.ask());
answer(q.ask());
answer(q.ask());
}
}
赫伯特·希尔特没有给出同样的理由。 我很困惑为什么关于枚举的选择是更好的选择?
最佳答案
滥用通用数字类型(例如 int
)作为枚举从来都不是一个好主意。考虑在 Java 中使用它的唯一原因是性能——当我说性能时,我指的是纳秒。
采用 int
方法会损失很多:enum
是一个成熟的类,可以具有任意方法,从而可以轻松简化和组织代码。您还可以获得完整的类型安全。事实上,优点太多了,如果我试图将它们全部列举出来,这个答案就会太长。
关于java - 对于下面提到的情况,接口(interface)或枚举哪一个是更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26241562/