扩展ArrayList <date>:如何在其中使用Date对象?

时间:2018-05-17 19:51:30

标签: java inheritance arraylist

我需要从ArrayList扩展类MyTime并添加方法。 另外我需要Date的实例,它的方法如MyTime中的after。但编译说:

error: cannot find symbol method after(Date)
where Date is a type-variable:
Date extends Object declared in class TimeList

这是我的班级:

public class TimeList<Date> extends ArrayList<Date> {
    private Integer current_index;

    public Date getNextTime(){
        Date time = new Date();
        for (Date temp_time :this){
            if (time.after(temp_time)){
                return temp_time;
            }
        }
        return time;
    }
}

我应该如何声明Date实例或MyTime类?

1 个答案:

答案 0 :(得分:4)

由于您的类不是通用的,因此其声明不应具有泛型类型参数;只有ArrayList应该拥有它:

public class TimeList extends ArrayList<Date> ...
//                   ^
//       No <Date> in the declaration

您无需担心班级名称中遗漏Date,因为该名称已具有足够的描述性,以便人类读者了解您的班级代表了时间点的集合。

但是,您应该重新考虑您的方法:您的课程应该包含列表,而不是扩展ArrayList<Date>

public class TimeList {
    private final List<Date> dates = new ArrayList<>();
    public List<Date> getDates() {
        return Collections.unmodifiableList(dates);
    }
    ... // your additional methods
}

或者如果您需要在List<Date>上提供其他方法,则可以编写实用程序类:

public final class TimeLists {
    public static Date getNextTime(List<Date> dates) {
        ... //
    }
    public static Date getPriorTime(List<Date> dates) {
        ... //
    }
    ...
    private TimeLists() {
        // Prevent instantiation of TimeLists class
    }
}