扩展ArrayList<Date>:如何在其中正确使用Date对象?
解决泛型导致Date类方法找不到的报错问题
嘿,我一眼就看出你这问题出在哪了——泛型参数的命名冲突坑到你啦!
你给TimeList定义了泛型<Date>,这个Date是你自定义的类型变量,不是我们常用的java.util.Date类!编译器会把你代码里所有的Date都当成这个泛型参数,而它根本没有after()方法,自然就报出“找不到符号”的错误了。
给你两种修正方案,按需选择:
方案一:去掉不必要的泛型,直接绑定java.util.Date
如果你的TimeList就是专门用来存储Date类型的,那完全不需要泛型,直接指定ArrayList的元素类型为java.util.Date就行:
import java.util.ArrayList; import java.util.Date; public class TimeList 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都会指向正确的系统类,after()方法就能正常调用了。
方案二:保留泛型,但避免命名冲突并约束类型
如果你确实需要泛型支持(比如后续要扩展支持Date的子类),那换个泛型参数名,同时指定它的上限为Date:
import java.util.ArrayList; import java.util.Date; public class TimeList<T extends Date> extends ArrayList<T> { private Integer current_index; public T getNextTime(){ Date time = new Date(); for (T temp_time : this){ if (time.after(temp_time)){ return temp_time; } } // 这里需要强制转换,因为time是Date类型,T是Date的子类 return (T) time; } }
这里用<T extends Date>明确泛型类型必须是Date或其子类,既保留了泛型的灵活性,又不会和系统的Date类混淆。
总的来说,核心就是别把泛型参数命名成和系统类一样的名字,不然编译器会傻傻分不清楚哦~
内容的提问来源于stack exchange,提问作者Mohammad Etemaddar
相关产品推荐
相关产品推荐

