如何避免使用空方法实现?

时间:2015-09-25 09:50:09

标签: java iterator

我对java中的类的结构有疑问:

我有第一堂课:抽象的MyClass

public abstract class MyClass
{
    protected void abstract monitor();
}

然后我有一个抽象迭代器

public abstract class MyClassIterator<T> extends MyClass
{
    protected void abstract monitor(T data);
}

在实践中,我将创建将继承自MyClass或MyClassIterator的类。

我想确保MyClass的所有实例都实现了监视器,但是对于迭代器,我怎么能避免插入像

这样的东西
protected void monitor() {};

只是为了实现它:/

感谢您的任何想法:)

2 个答案:

答案 0 :(得分:3)

monitor中添加MyClass的默认实施,并带有自定义异常

public abstract class MyClass
{
    protected void abstract monitor()
    {
        throw new NotImplementedException();
    }
}

因此,MyClassIterator不必实现该方法,MyClass的其他子类必须覆盖它。

答案 1 :(得分:1)

如果您不希望MyClassIterator子类必须实现此方法,则必须将空实现添加到MyClassIterator。 您还可以在实现中抛出一些异常。

public abstract class MyClassIterator<T> extends MyClass
{
    protected abstract void monitor(T data);

    protected void monitor() {
        //optional
        throw new UnsupportedOperationException();
    }
}

注意:您无法在void之前撰写abstract,您需要在monitor(T data)方法中修复此问题,就像在我的回答中一样。