Java 如何测试像is valueOf()这样的枚举?
G'day,勘误表。。。我的计划如下所示。此更新是为了澄清和道歉深夜的问题。编译错误是由于文件中其他地方的问题造成的 澄清:一个简单的Java枚举,如下所示:Java 如何测试像is valueOf()这样的枚举?,java,enums,value-of,Java,Enums,Value Of,G'day,勘误表。。。我的计划如下所示。此更新是为了澄清和道歉深夜的问题。编译错误是由于文件中其他地方的问题造成的 澄清:一个简单的Java枚举,如下所示: public enum ServiceSource { NONE, URL, FILE; } public boolean isURL(){ return (URL == this); } public boolean isURL(){ return (URL == this); }
public enum ServiceSource
{
NONE,
URL,
FILE;
}
public boolean isURL(){
return (URL == this);
}
public boolean isURL(){
return (URL == this);
}
想检查一下,比如,isURL():
这项工作(并编译)。。。毫无疑问——正确答案是:dasblinkenlight和Elliott Frisch。非常感谢您抽出时间
另见:
this
是否等于URL
,如下所示:
public enum ServiceSource
{
NONE,
URL,
FILE;
}
public boolean isURL(){
return (URL == this);
}
public boolean isURL(){
return (URL == this);
}
由于这是一个实例方法,您需要检查
this
是否等于URL
,如下所示:
public enum ServiceSource
{
NONE,
URL,
FILE;
}
public boolean isURL(){
return (URL == this);
}
public boolean isURL(){
return (URL == this);
}
如果我理解你的问题,枚举中正确的方法是使用
这样的
public enum ServiceSource
{
NONE( "no_value" ),
URL( "url" ),
FILE( "file" );
ServiceSource(String v) {
text =v;
}
private String text;
public boolean isURL() {
return this == URL;
}
}
如果我理解你的问题,枚举中正确的方法是像这样使用this
public enum ServiceSource
{
NONE( "no_value" ),
URL( "url" ),
FILE( "file" );
ServiceSource(String v) {
text =v;
}
private String text;
public boolean isURL() {
return this == URL;
}
}
如果您想要具有多态性的方法,即对于enum
类的不同实例(值)表现出不同的行为,我的首选是覆盖一个通用方法:
public enum ServiceSource {
NONE("no_value"),
URL("url"){
@Override
public boolean isURL() {
return true;
}
},
FILE("file");
private final String val;
private ServiceSource(String val) {
this.val = val;
}
public boolean isURL() {
return false;
}
}
但是对于检查这是否是特定的enum
值的方法,为每个常量添加isXXX
方法似乎是非常浪费的。实际上,使用enum
的真正原因是,您可以编写
if(thing == ServiceSource.URL)
在代码的其他地方。如果您想要具有多态性的方法,即对于枚举
类的不同实例(值)表现出不同的行为,我的首选是覆盖一个通用方法:
public enum ServiceSource {
NONE("no_value"),
URL("url"){
@Override
public boolean isURL() {
return true;
}
},
FILE("file");
private final String val;
private ServiceSource(String val) {
this.val = val;
}
public boolean isURL() {
return false;
}
}
但是对于检查这是否是特定的enum
值的方法,为每个常量添加isXXX
方法似乎是非常浪费的。实际上,使用enum
的真正原因是,您可以编写
if(thing == ServiceSource.URL)
在代码中的其他位置。您可以在枚举上创建一个方法来检查自身的值,如下所示:
public enum ServiceSource
{
NONE,
URL,
FILE;
}
public boolean isURL(){
return (URL == this);
}
public boolean isURL(){
return (URL == this);
}
但是很难看出这种方法的价值,因为每个对象都有一个内置的equals()方法来完成相同的任务
if (serviceSource.equals(ServiceSource.URL)) { ... }
这将是检查枚举变量(或与此相关的任何变量)赋值的更常见和更明显的方法。采用第一种方法需要在枚举上有一个新的isX()方法;每次添加枚举常量时,您可能都需要一个新的方法来伴随它。您可以在枚举上创建一个方法来检查自身的值,如下所示:
public enum ServiceSource
{
NONE,
URL,
FILE;
}
public boolean isURL(){
return (URL == this);
}
public boolean isURL(){
return (URL == this);
}
但是很难看出这种方法的价值,因为每个对象都有一个内置的equals()方法来完成相同的任务
if (serviceSource.equals(ServiceSource.URL)) { ... }
这将是检查枚举变量(或与此相关的任何变量)赋值的更常见和更明显的方法。采用第一种方法需要在枚举上有一个新的isX()方法;每次添加枚举常量时,您可能都希望有一个新方法伴随使用。您得到的确切编译器错误是什么?请参阅以获得经常喜欢的答案。您得到的确切编译器错误是什么?请参阅以获得经常喜欢的答案。