Java中的通用抽象类

时间:2013-11-26 00:34:41

标签: java abstract-class

我正在尝试创建一个简单的小类,我可以在C / C ++中创建类似于宏的类。基本上我希望能够在需要通过对象列表执行一些操作时调用以下代码,如下所示:

new IteratableList{
   void action() {
       // do something
   }
}.perform();

我已经用Java编程了很长一段时间,当我尝试添加抽象操作方法时,我无法弄清楚我的代码出了什么问题:

import java.util.List;
import java.util.Iterator;

public abstract class IteratableList<T> {
    public void perfrom(List<T> ls) {
        Iterator<T> l = ls.iterator();
        while (l.hasNext())
            action(l.next());
    }

    private abstract void action(<T> obj);
}

在我输入最后一个方法之前,我的代码没有出现任何错误。我收到错误告诉我从方法标题中删除抽象,当我更改它时,我得到一个其他错误的列表。我觉得我在这里错过了一个基本的东西。有没有人看到一个明显的错误?

2 个答案:

答案 0 :(得分:7)

private abstract void action(<T> obj);

应该是

protected abstract void action(T obj);

如果您有通用方法,则必须在方法签名中定义它:

protected abstract <T> void action(T obj);

除非(这里是这种情况),通用参数是在类级定义的。

您还应该移除private修饰符并改为protectedabstract表示必须重写该方法,但private表示子类无法访问它。 protected扩展了private对子类的可访问性。

答案 1 :(得分:0)

而不是

private abstract void action(<T> obj);

我想你想要

protected abstract void action(T obj);

泛型的语法错误,您不能拥有私有抽象方法。