我正在尝试用更惯用的 Clojure 包装外部库。这包括使其数据结构变得惰性。我想进入下面的 read
静态方法并使 FooList
变得惰性。
我遇到了很多问题:
- Java 静态方法无法被重写
代理
似乎只生成实例对象gen-class
似乎有点工作,但我迷失在命名空间、别名等的海洋中。- 相关方法调用另一个静态和私有(private)方法(我想重用它),使得重写公共(public)方法变得困难。
做到这一点的最佳策略是什么?是否可以打开 FooList
并将其重新实现为惰性,并且生成的类可供我的代码的其余部分使用?
org.apache.commons.collections.list.LazyList似乎适合该任务,但我不确定如何实际使用它。
帮忙?
public class Foo {
public static FooList read(String filename) {
FooList foos = new FooList(); //FooList extends ArrayList
BufferedReader br = new BufferedReader(new FileReader(filename));
for (String s = br.readLine(); null != s; s = br.readLine()) {
Foo f = parseLine(s);
foos.add(f);
}
br.close();
return foos;
}
private static Foo parseLine(String s) {
//return s as Foo
}
}
最佳答案
可能完全超出了你的范围,但我有一个similar problem 。所以我的最终选择是使用 java.lang.Iterable,如果你想得更深入,它完全符合惰性标准。是的,它没有 List
所具有的一些东西(例如 size()
),但为了简单起见,我可以牺牲这一点。回想起来,我从不后悔自己的选择。
关于java - 如何在 java 静态方法中扩展数据结构以使其变得惰性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624021/