Java中的通用抽象类

use*_*678 1 java abstract-class

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

new IteratableList{
   void action() {
       // do something
   }
}.perform();
Run Code Online (Sandbox Code Playgroud)

我在相当长一段时间内没有使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*vel 7

private abstract void action(<T> obj);
Run Code Online (Sandbox Code Playgroud)

应该

protected abstract void action(T obj);
Run Code Online (Sandbox Code Playgroud)

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

protected abstract <T> void action(T obj);
Run Code Online (Sandbox Code Playgroud)

除非(这是这里的情况)泛型参数是在类级别定义的.

您还应该删除private修改器并protected改为使用它.abstract表示必须重写该方法,但private表示子类无法访问它.protected扩展private子类的可访问性.