Java中的泛型抽象类
我正在尝试创建一个简单的小类,在这个类中我可以创建一些类似于C/C++中的宏的东西。基本上,当我需要通过对象列表执行一些操作时,我希望能够调用以下代码,如下所示: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
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:就在它下面。我首先关注的是错误的泛型赋值,而不是访问器。我会编辑它以避免误解。对不起。我一定是第一次错过了。