gpt4 book ai didi

java - 如何编写一个可以基于枚举作为参数返回不同数据类型的方法?

转载 作者:行者123 更新时间:2023-11-29 07:32:43 25 4
gpt4 key购买 nike

我想定义一个方法并通过传递枚举,返回基于枚举的映射类型。到目前为止,我只用这种方式锻炼:

public class Person {

HashMap<String, Object> mData;


void int getDetail(DetailInt detail){
Object data = mData.get(detail.name());
if(data instanceof Integer)
return (int)data;
return 0;
}

void String getDetail(DetailStr detail){
Object data = mData.get(detail.name());
if(data instanceof String)
return (String)data;
return "";
}

}



public enum DetailInt {
Age("age"), Weight("weight"), Height("height");

String columnName;
DetailInt(String columnName){
this.columnName= columnName;
}
}

public enum DetailStr {
FirstName("first_name"), LastName("last_name");

String columnName;
DetailStr (String columnName){
this.columnName= columnName;
}
}

所以我可以使用相同的方法,但传递不同的枚举来获取具有该类型的数据。

int age = person.getDetail(DetailInt.Age);
String firstName = person.getDetail(DetailStr.FirstName);

现在,我想要实现的是将两个枚举合并在一起,这样我就可以如下调用:

int age = person.getDetail(Detail.Age);
String firstName = person.getDetail(Detail.FirstName);

它更整洁。但是,我已经尝试了泛型类型和接口(interface),仍然找不到实现它的方法。使用下面的方式与我想要的类似,但这不是枚举类型。

abstract class Detail {

}

class DetailStr extend Detail {

}

interface Details {
DetailStr firstName = new DetailStr("first_name");
DetailStr lastName = new DetailStr("las_name");
DetailInt age = new DetailInt("age");
DetailInt weight = new DetailInt("weight");
DetailInt height = new DetailInt("height");
}

public class Person {

void int getDetail(DetailInt detail){
....
}

void String getDetail(DetailStr detail){
....
}

}

最佳答案

您不能在 Java 中执行此操作。

这是因为枚举器的特定值与该枚举器的任何其他值具有相同的类型。因此不可能构造一个重载函数,因为没有类型差异来充当描述符。 (您不能仅通过返回类型差异来重载函数。)

显而易见的解决方案是使用 getDetailAsIntgetDetailAsString 两种方法。

关于java - 如何编写一个可以基于枚举作为参数返回不同数据类型的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com