gpt4 book ai didi

Java - 编译器错误 - 类中定义的枚举不能用于同一类中的泛型替换

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:06 27 4
gpt4 key购买 nike

我已经定义了一个名为 IReport 的通用接口(interface),它采用通用参数类型 T

public interface IReport<T> {

public enum ReportType {
YEARLY, MONTHLY, WEEKLY
}

public String getName();

public ReportType getType();

public Map<T, List<Cost>> getResults();

}

一个类正在实现这个接口(interface)

public class WeeklyReport implements IReport<Days> {

public enum Days {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

@Override
public String getName() {
return "Weekly report ";
}

@Override
public ReportType getType() {
return ReportType.WEEKLY;
}

@Override
public Map<Days, List<Cost>> getResults() {
return null;
}

}

如果你看到这个,在 WeeklyReport 中,T 被替换为在 WeeklyReport 类本身中定义的枚举类型,它是 天数。因为这个 eclipse 是给编译器错误说

Days cannot be resolved to a type

enter image description here

如果我使用任何其他枚举进行泛型替换(在此类之外定义),那么编译器错误就会消失。请帮我解决这个问题。

最佳答案

你有一个编译器错误,因为当外部类调用 WeeklyReport#getResults() 时它期望得到 Map<Days, List<Cost>> 类型的结果和 Days外部类的类型将是未知的。

无需创建嵌套枚举 static ,因为嵌套枚举隐式为 static .只需重构类定义和 getResults()方法:

public class WeeklyReports implements IReport<WeeklyReports.Days> {
..
public Map<WeeklyReport.Days, List<Cost>> getResults() {
...
}
..
}

关于Java - 编译器错误 - 类中定义的枚举不能用于同一类中的泛型替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22010976/

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