只是希望我能让有人告诉我我这样做是否正确,因为我以前从未写过这样的东西。所以我必须编写一个名为 ProcessQueue 的类,它是 Vector 的子类,以及一个定义空队列的构造函数。Vector 也将保存“Object”类型的项目。所以这里...
public class ProcessQueue<Vector>{
ProcessQueue(){}
}
只是希望我能让有人告诉我我这样做是否正确,因为我以前从未写过这样的东西。所以我必须编写一个名为 ProcessQueue 的类,它是 Vector 的子类,以及一个定义空队列的构造函数。Vector 也将保存“Object”类型的项目。所以这里...
public class ProcessQueue<Vector>{
ProcessQueue(){}
}
不,这是不对的。这是通用的,不是扩展的。
此外,这不是一个好主意。您ProcessQueue
可能在下面有某种集合,但它不需要扩展。更喜欢组合而不是继承。
如果你必须实现某些东西,首先要有一个看起来像Queue
. 有某种行为是预期的;确保你的符合它。最好的方法是实现一个强制它的接口。
public class ProcessQueue<T> implements Queue<T> {
// Have a private collection of some sort that provides the behavior that the interface requires
}
你没有扩展到Vector
任何地方。将您的代码更改为:
public class ProcessQueue<T> extends Vector<T> {
}
顺便说一句,我不建议你使用Vector
。检查为什么 Java Vector 类被认为已过时或不推荐使用?. IMO 如果你必须这样做,它会更好地扩展ArrayList
。
public class ProcessQueue<T> extends ArrayList<T> {
}
并在您的代码中使用List
:
List<SomeClass> lstQueue = new ProcessQueue<SomeClass>();
U̶n̶r̶e̶l̶a̶t̶e̶d̶̶t̶o̶̶t̶h̶e̶̶o̶r̶i̶g̶i̶n̶a̶l̶̶q̶u̶e̶s̶t̶i̶o̶n̶,我认为与 duffymo 类似,您不应该扩展任何 Java Collection 类,除非它是必须做的。请注意,有很多类可以容纳几乎任何类型的常见集合,并且您拥有Queue
并且PriorityQueue
可以在您的实际工作中为您提供帮助。
最好的解决方案是 duffymo 所指出的,组合而不是扩展 Java 集合:
public class ProcessQueue<T> {
private List<T> data = new ArrayList<T>();
//rest of code...
}
或者创建一个新的接口实现,比如Queue
or List
。
public class ProcessQueue<T> implements Queue<T> {
//Queue interface methods implementation...
}