java - 在泛型表达式中使用枚举来定义返回类型

标签 java generics enums

我正在尝试使用泛型来根据枚举参数获取返回值。

public enum DataTypes {
   MEAL, EXAM_RESULT, SPORTS,ECA, HEATLH;
}


public class GeneralData{
    String getDataFile();
}

public class SportsData extends GeneralData{
    getDailyCalroiesBurnt();
    getSwimmingStyle();
}

public class HealthData extends GeneralData{
    getBloodGroup();
}

现在我想编写一个函数“getData(DataTypes datatype)”,其中

  • 当使用 DataTypes.SPORTS 调用时,返回 SportsData 对象
  • 当使用 DataTypes.HEATLH 调用时,返回 HealthData 对象
  • 对于所有其他返回 GeneralData 对象。

类似于:

<T> T getData(DataTypes datatype){
    ...
    ...
}

HealthData healthData = getData(DataTypes.HEATLH);
SportsData sportsData = getData(DataTypes.SPORTS);
GeneralData examData = getData(DataTypes.EXAM_RESULT);
GeneralData mealData = getData(DataTypes.MEAL);
GeneralData ecaData = getData(DataTypes.ECA);

如何使用泛型来做到这一点,这样我就不必进行任何转换?这可能吗?

基本上,我的类型以某种方式静态地将枚举绑定(bind)到要返回以在泛型表达式中使用的对象类型。

最佳答案

我会传递类对象:

<T extends GeneralData> T getData(Class<T> clazz);

然后你可以这样做:

SportsData sportsData = readData(SportsData.class);
HealthData healthData = readData(HealthData.class);

关于java - 在泛型表达式中使用枚举来定义返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18941979/

相关文章:

java - 谷歌探戈Java API : Scene update with Rajawali3D

java - 如何将 rxjava2 Zip 函数(从 Single/Observable)的数量概括为 n 个可选参数而不丢失其类型?

java - MyBatis 和泛型 : Return Type ArrayList<? extends MyClass> Returns Nulls

go - 强制函数只接受类型,而不是类型的底层类型

java - 如何使用枚举生成 switch 语句框架

Java链表在第一个位置插入节点

java - Spring MVC : FileNotFoundException "\Uploads\MyUploads\loading.gif (The system cannot find the path specified)"

java - Spring-注入(inject)的变量为空

java - 为什么 Jackson 的 ObjectMapper 方法采用原始 TypeReference

java - 使用枚举存储和获取静态值