Java 如何创建将返回扩展一个超类的任何类的列表的方法

Java 如何创建将返回扩展一个超类的任何类的列表的方法,java,generics,Java,Generics,我正在春季开发一个小型web应用程序 我希望避免重复代码,因此我希望在服务层中创建一个方法,该方法将根据参数调用适当的DAO方法 对于一个抽象支付类,我有三个子类(能量、水、气体)。 我还有一个名为Media的枚举类 在服务中,我想创建如下内容: (基于) @Autowired 读道能源; @自动连线 读水道水; @自动连线 读道气; @凌驾 公共列表GetReadingFortenant(公寓、媒体){ ReadingAbstract gg=新的ReadingEnergy(); 交换机(媒体)

我正在春季开发一个小型web应用程序

我希望避免重复代码,因此我希望在服务层中创建一个方法,该方法将根据参数调用适当的DAO方法

对于一个抽象支付类,我有三个子类(能量、水、气体)。 我还有一个名为
Media
的枚举类

在服务中,我想创建如下内容: (基于)

@Autowired
读道能源;
@自动连线
读水道水;
@自动连线
读道气;
@凌驾
公共列表GetReadingFortenant(公寓、媒体){
ReadingAbstract gg=新的ReadingEnergy();
交换机(媒体){
案例能量:
返回能量。GetListFortendent(公寓);
打破
外壳气体:
返回气体。GetListFortendent(公寓);
打破
案例水:
回水。GetListFortendent(公寓);
打破
违约:
抛出新的IllegalArgumentException();
}
返回null;
}
不幸的是我

 Type mismatch: cannot convert from List<ReadingEnergy> to List<T>
类型不匹配:无法从列表转换为列表
我也试过这样做:

public  List<?> getReadingsForTenant(Apartment apartment, Media media) {

        switch (media) {
        case ENERGY:
            System.out.println("getReadingsForTenant - energia");
            return energy.getListForTenant(apartment);

        case GAS:
            System.out.println("getReadingsForTenant - gas");
            return gas.getListForTenant(apartment);

        case WATER:
            System.out.println("getReadingsForTenant - woda");
            return water.getListForTenant(apartment);

        default:
            throw new IllegalArgumentException();
        }

}
公共列表GetReadingFortenant(公寓、媒体){
交换机(媒体){
案例能量:
System.out.println(“GetReadingFortenant-energia”);
返回能量。GetListFortendent(公寓);
外壳气体:
System.out.println(“GetReadingFortenant-gas”);
返回气体。GetListFortendent(公寓);
案例水:
System.out.println(“GetReadingFortenant-woda”);
回水。GetListFortendent(公寓);
违约:
抛出新的IllegalArgumentException();
}
}
这通常有效,但当我创建一个新对象时

Apartment ap = (some apartment);
List<ReadingWater> list = (List<ReadingWater>) readingService.getReadingsForTenant(ap, Media.WATER);
公寓ap=(一些公寓);
List=(List)readingService.getReadingsForTenant(ap,Media.WATER);
我得到:

Type safety: Unchecked cast from List<capture#3-of ?> to List<ReadingWater>
类型安全:未选中从列表到列表的强制转换
我可以使用
@SuppressWarnings(“unchecked”)
,但这对我来说并不好


处理此类内容的正确方法是什么?

不能有依赖于运行时参数的返回类型:类型必须在编译时已知


此方法的唯一返回类型是:
list注意:
return
语句后的
break
是不可访问的,因此不需要。
Type safety: Unchecked cast from List<capture#3-of ?> to List<ReadingWater>
public List<ReadingWater> getWaterReadingsForTenant(Apartment apartment);
public List<ReadingGas> getGasReadingsForTenant(Apartment apartment);
// etc.
List<ReadingWater> list =
    (List<ReadingWater>) readingService.getReadingsForTenant(ap, Media.GAS);