java - Java 中的通用抽象类

标签 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);
}

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

最佳答案

private abstract void action(<T> obj);

应该是

protected abstract void action(T obj);

当你有一个泛型方法时,你必须在方法签名中这样定义它:

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

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

您还应该删除 private 修饰符并使其成为 protectedabstract 表示该方法必须被覆盖,但是 private 表示子类不能访问它。 protectedprivate 的可访问性扩展到子类。

关于java - Java 中的通用抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20206373/

相关文章:

Java Swing 更新 JTextArea 中的字符串

java - @Autowired 对象中的 Spring 空指针异常

java - 如何创建返回 ArrayList 的方法

java - 如何使用 Maven 创建没有依赖项的可执行 jar?

c++ - 变量类派生自某个抽象类的类模板

java - 方形图案java

java - Java 8 中接口(interface)和抽象类之间的根本区别

python - 为什么要检查 cls 是否是 __subclasshook__ 中的类?

java - 当调用新的 Asynctask 时定义 onPostExecute

c# - 类映射错误 : 'T' must be a non-abstract type with a public parameterless constructor