编写类是Vector的子类,java

时间:2013-03-20 20:45:44

标签: java vector constructor

希望我能找到一个人告诉我,我这样做是对的,因为我之前从未写过这样的东西。所以我必须编写一个名为ProcessQueue的类,它是Vector的子类,以及一个定义空队列的构造函数。 Vector也将保存“对象”类型的项目。所以这就是......

public class ProcessQueue<Vector>{

ProcessQueue(){}


}

2 个答案:

答案 0 :(得分:7)

不,那不对。这是通用的,而非扩展。

此外,这不是一个好主意。您的ProcessQueue下面可能有某种类型的集合,但不需要扩展。首选组合继承。

如果您必须实施某些内容,请首先使用实际上看起来像Queue的API。有某种行为是预期的;确保你的符合它。最好的方法是实现一个强制执行它的接口。

public class ProcessQueue<T> implements Queue<T> {
   // Have a private collection of some sort that provides the behavior that the interface requires
}

答案 1 :(得分:6)

您没有将Vector扩展到任何地方。将您的代码更改为:

public class ProcessQueue<T> extends Vector<T> {

}

顺便说一句,我建议你不要使用Vector。检查Why is Java Vector class considered obsolete or deprecated?。 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̶s̶t̶i̶o̶n̶,我认为与duffymo类似,你不应该扩展任何Java Collection类,直到它是必须做的。请注意,有很多类可以容纳几乎任何类型的常见集合,并且QueuePriorityQueue可以帮助您完成实际工作。

最好的解决方案是duffymo指向的,而不是扩展Java Collection:

public class ProcessQueue<T> {

    private List<T> data = new ArrayList<T>();

    //rest of code...
}

或创建界面的新实现,例如QueueList

public class ProcessQueue<T> implements Queue<T> {

    //Queue interface methods implementation...
}