Java中的泛型抽象类

Java中的泛型抽象类,java,abstract-class,Java,Abstract Class,我正在尝试创建一个简单的小类,在这个类中我可以创建一些类似于C/C++中的宏的东西。基本上,当我需要通过对象列表执行一些操作时,我希望能够调用以下代码,如下所示: new IteratableList{ void action() { // do something } }.perform(); 我已经有一段时间没有用Java编程了,当我尝试添加抽象动作方法时,我无法找出代码的错误: import java.util.List; import java.util.It

我正在尝试创建一个简单的小类,在这个类中我可以创建一些类似于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);
}
import java.util.List;
导入java.util.Iterator;
公共抽象类IteratableList{
公共作废性能(列表ls){
迭代器l=ls.Iterator();
while(l.hasNext())
行动(l.next());
}
私人抽象无效诉讼(obj);
}
在键入最后一个方法之前,我的代码不会出现任何错误。我收到错误,告诉我从方法头中删除摘要,当我更改时,我会得到一个其他错误的列表。我觉得我错过了一件基本的事情。有人看到明显的错误吗

private abstract void action(<T> obj);
当您有一个泛型方法时,您必须在方法签名中将其定义为:

protected abstract <T> void action(T obj);
受保护的抽象无效行为(T obj);
除非在类级别定义泛型参数(这里就是这种情况)

您还应该删除
private
修饰符,并将其改为
protected
abstract
表示必须重写该方法,但
private
表示子类无法访问该方法
protected
private
的可访问性扩展到子类

当您有一个泛型方法时,您必须在方法签名中将其定义为:

protected abstract <T> void action(T obj);
受保护的抽象无效行为(T obj);
除非在类级别定义泛型参数(这里就是这种情况)

您还应该删除
private
修饰符,并将其改为
protected
abstract
表示必须重写该方法,但
private
表示子类无法访问该方法<代码>受保护将
私有
的可访问性扩展到子类。

而不是

private abstract void action(<T> obj);
泛型的语法错误,不能使用私有抽象方法。

而不是

private abstract void action(<T> obj);

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

为什么我被否决了?一个澄清的评论会更有帮助。Jeroen-因为你不能有一个私有的抽象方法。因为(根据定义)它必须是
受保护的
公共的
,子类才能覆盖它。我反对这一行
私人抽象无效行为(T obj)@ElliottFrisch:就在它下面。我首先关注的是错误的泛型赋值,而不是访问器。我会编辑它以避免误解。对不起。我一定是第一次错过了。为什么我被否决了?一个澄清的评论会更有帮助。Jeroen-因为你不能有一个私有的抽象方法。因为(根据定义)它必须是
受保护的
公共的
,子类才能覆盖它。我反对这一行
私人抽象无效行为(T obj)@ElliottFrisch:就在它下面。我首先关注的是错误的泛型赋值,而不是访问器。我会编辑它以避免误解。对不起。我一定是第一次错过了。