Java-编译器错误-类中定义的枚举不能用于同一类中的泛型替换
我已经定义了一个名为Java-编译器错误-类中定义的枚举不能用于同一类中的泛型替换,java,generics,enums,Java,Generics,Enums,我已经定义了一个名为IReport的通用接口,它采用通用参数类型T public interface IReport<T> { public enum ReportType { YEARLY, MONTHLY, WEEKLY } public String getName(); public ReportType getType(); public Map<T, List<Cost>> getRe
IReport
的通用接口,它采用通用参数类型T
public interface IReport<T> {
public enum ReportType {
YEARLY, MONTHLY, WEEKLY
}
public String getName();
public ReportType getType();
public Map<T, List<Cost>> getResults();
}
公共接口IReport{
公共枚举报告类型{
每年、每月、每周
}
公共字符串getName();
public ReportType getType();
公共映射getResults();
}
一个类正在实现这个接口
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实现IReport{
公众普查日{
周一、周二、周三、周四、周五、周六、周日
}
@凌驾
公共字符串getName(){
返回“周报”;
}
@凌驾
公共报告类型getType(){
返回ReportType.WEEKLY;
}
@凌驾
公共地图getResults(){
返回null;
}
}
如果您看到这一点,则在WeeklyReport
中,T
被WeeklyReport
类本身中定义的枚举类型所取代,即Days
。对于这个eclipse,编译器错误是
无法将天解析为类型
如果我使用任何其他枚举进行泛型替换(在这个类之外定义),那么编译器错误就会消失。请帮助我解决这个问题。您有一个编译器错误,因为当外部类调用
WeeklyReport#getResults()
时,它将期望得到类型为Map
的结果,而外部类的天
类型将是未知的
无需使嵌套的枚举静态
,因为嵌套的枚举隐式地静态
。只需将类定义和getResults()
方法重构为:
public class WeeklyReports implements IReport<WeeklyReports.Days> {
..
public Map<WeeklyReport.Days, List<Cost>> getResults() {
...
}
..
}
公共类WeeklyReports实现IReport{
..
公共地图getResults(){
...
}
..
}
可以定义一个标记接口单元
或任何东西,并将接口声明为i报告
?然后Enum将需要实现该接口,当然,如果我是你,我会声明@Override public String to String()代码>为了安全起见;)@fge我尝试创建标记接口。。它没有很好地工作,只是将类型更改为WeeklyReport.Days
worked!。也没有必要使枚举为静态。。谢谢:)@sanbhat,当然,我的错。默认情况下,嵌套枚举是隐式静态的。我编辑了答案,现在它更有意义了。:)