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,当然,我的错。默认情况下,嵌套枚举是隐式静态的。我编辑了答案,现在它更有意义了。:)