2013-11-26 109 views
0

所以,这是我之前提出的后续问题。我写了下面的代码:扩展内联通用抽象模板类

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宏)这样我就可以实现的操作方法,并通过许多事情列表中的迭代。我在执行内联代码时遇到问题(我认为是这个词?),但我无法弄清楚如何使用泛型编写代码。为了给你什么,我试图做一个例子,我基本上要做到以下几点:

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

但我没有真正得到任何运气,我不会给出任何有用的错误。我有点不熟悉Java中的熟悉区域,我还没有在该语言中编写过相当长的一段时间。

到目前为止,我得到的错误(在eclipse中)是“令牌的语法错误,错位的构造(s)”和“void是变量操作的无效类型”。就我所能理解的而言,这些方法并没有真正的帮助。

+0

出了什么问题,你试过吗? –

+0

你需要提供更多的信息,特别是什么不工作,以及你认为它没有做你想做的具体原因。否则没有人能够帮助你。基于你提供的小代码,它看起来确实如此,所以问题在于你没有共享的代码。 –

+0

我得到“令牌的语法错误,错位的结构”和“无效的变量行为是无效的类型”我不太确定。我正在使用eclipse。这是我得到的唯一的错误信息。我不知道什么是错的。 – user2827678

回答

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); 
+0

你可以用通用的方式定义一个抽象方法,然后在没有泛型的情况下实现它? –

+0

@SteveP检查最后一次编辑。希望解释它。 –

+0

完美,谢谢! – user2827678