内联一个通用的抽象Template类

时间:2013-11-26 04:57:23

标签: java generics inline abstract

所以,这是我之前提出的一个跟进问题。我写了以下代码:

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

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

这是创建一个模板(在C中像一个宏一样排序),所以我可以实现action方法并遍历列表中的很多东西。我在使用内联代码时遇到问题(我认为这就是单词?),但我无法弄清楚如何使用泛型来编写它。为了举例说明我要做的事情,我基本上想要做到以下几点:

new IterableList<String>{
   void action(String s) {
       // do something
   }
}.perform(myListOfStrings);

但我真的没有运气,而且我没有得到任何有用的错误。我有点不熟悉Java中的熟悉区域,我还没有用语言编程很长一段时间。

到目前为止,我得到的错误(在eclipse中)是“令牌上的语法错误,错位的构造”和“void是变量操作的无效类型”。据我所知,这些并不是真正有用的。

1 个答案:

答案 0 :(得分:2)

你的语法有点不对。

List<String> myListOfStrings = ...// some List

new IterableList<String>() { // missing ()
    public void action(String s) {
        // do something
    }
}.perfrom(myListOfStrings);

请注意,您无法降低方法的可见性。 action在父类中声明为public,因此子类中的action()必须至少为public。此外,perform拼写错误。

上述内容相当于

public class AnonymousClass extends IterableList<String> {
    public void action(String s) {
        // do something
    }
}

...
new AnonymousClass().perfrom(myListOfStrings);