如果我有以下
public enum MY_ENUM_THING
{
NAME("JOE"),
SOMETHING,
ISWORKING(true);
private String parameter;
private boolean truth;
MY_ENUM_THING()
{
}
MY_ENUM_THING(String parameter)
{
this.parameter = parameter;
}
MY_ENUM_THING(boolean truth)
{
this.truth = truth
}
public ?? getEnumValue()
{
// this method (return) is what would be jamming me up
}
}
如果枚举的类型是什么,我怎样才能返回?
示例和期望的结果
System.out.print(MY_ENUM_THING.NAME.getEnumValue());
//JOE
System.out.print(MY_ENUM_THING.SOMETHING.getEnumValue());
//SOMETHING <-- just return SOMETHING.name()
System.out.print(MY_ENUM_THING.ISWORKING.getEnumValue());
//true
答案 0 :(得分:3)
你不能写这样的方法,每种情况都有不同的返回类型! (除非你返回Object
,但这会很混乱。)事实上,我闻到了一个设计问题 - 每个枚举值都应该包含每个属性的值,为某些属性和值设置值是有问题的。不适合他人。
答案 1 :(得分:3)
找到更好的设计。 Java不能像这样工作。所有返回类型的唯一公共类是Object(boolean - &gt; Boolean)。在将此方法强制转换为适当的类型之前,是否要在每次调用此方法时检查返回类型的类。
您的设计也很糟糕,因为枚举意味着代表一组有限的值,每个值都具有相同的类型和属性。您正在创建三个完全不同的对象,代表三种不同的东西。
您需要查看您的用例并提出更好的设计。你甚至可以发一个单独的问题来征询意见。
答案 2 :(得分:1)
这应该可以解决问题:
public String getEnumValue()
{
if(parameter != null){
return parameter;
}
if(truth != null){
return Boolean.toString(truth);
}
return name();
}
您还应该将布尔值更改为大写字母B'布尔值'
但是,正如其他人所说,这可能是一个值得怀疑的设计。
回答真正的问题“如何返回与给定变量相匹配的类型?”你没有。但是,如果要保留值的实际返回类型,则可以将返回值设为Object:
public Object getEnumValue()
{
if(parameter != null){
return parameter;
}
if(truth != null){
return truth;
}
return this;
}
答案 3 :(得分:0)
类和接口究竟出了什么问题?
interface Thing<E> {
E getValue();
}
class Name implements Thing<String>{
private String parameter;
Name(String p){parameter = p;}
String getValue(){return parameter;}
}
class Something implements Thing<Void>{
Void getValue(){return null;}
}
class IsWorking implements Thing<Boolean>{
private boolean truth;
IsWorking(boolean t){truth = t;}
Boolean getValue(){return truth;}
}