如何解决抽象静态方法设计问题?

时间:2012-01-12 16:45:40

标签: java abstract-class

我有几个队列都扩展了Queue类。我想做一个Queue manger基类来处理添加到队列(和其他操作)。

如果你看一下下面的代码,我创建了一个名为QueueManger的基类,它有一个名为add()的静态方法,它将获得'Queue'并为其添加一个变量。我想让getQueue()(在add()中调用)抽象,因为我想强制其他类提供自己的'Queue'实现。问题是我无法声明抽象静态方法。解决这个问题的正确方法是什么?

public class RegistrationQueueManger {
    @Override
    Queue getQueue() {
        return new RegistrationQueue(); // RegistrationQueue is a class that
                                        // extends Queue.java
    }
}

public abstract class QueueManger {
    abstract static Queue getQueue(); // Error: cant do! (in java)

    public static Add(String myvar) {
        getQueue().add(myvar);
    }
}

注意:我看到了一些关于这个主题的问题,但它并没有给出如何解决它并创建另一个设计来处理它的好答案。

3 个答案:

答案 0 :(得分:3)

只能覆盖实例方法。因此静态方法上的抽象是没有意义的。 getQueue方法不应该是静态的,add方法也不应该是静态的。

答案 1 :(得分:1)

这是因为必须重写(实现)抽象方法,并且不继承静态方法。任何静态的东西都属于声明它的类本身。所以,如果你使getQueue()静态,那么它将是一个属于类QueueManger类本身的类方法。因此,将其设为实例方法,以便扩展QueueManger的每个类都有自己的getQueue()

答案 2 :(得分:0)