我想向Clojure传递Java函数的映射。这些函数使用实现IFn接口的Java匿名类。我还需要实现ISeq接口以传递列表。 ISeq接口很简单,但具有no documentation。我需要知道ISeq中的每个方法做什么,和/或找到实现所有ISeq方法的类的Java代码(我不想copy my lists转换为Clojure结构)。
最佳答案
我需要知道ISeq中每个方法的作用
您还应该了解它扩展的接口:
public interface Seqable {
ISeq seq(); // returns an ISeq instance
}
public interface IPersistentCollection extends Seqable {
// returns the count of this coll
int count();
// returns a new coll with o cons'd onto it
IPersistentCollection cons(Object o);
// returns a new empty coll (of same type?)
IPersistentCollection empty();
// compares this coll against o for equality
boolean equiv(Object o);
}
public interface ISeq extends IPersistentCollection {
// returns the first item in this seq
Object first();
// returns a new seq of every item in this except the first
ISeq next();
// returns a new seq of every item in this except the first
// ASeq returns empty for empty
ISeq more();
// returns a new seq with o cons'd onto this seq
ISeq cons(Object o);
}
...或找到实现所有ISeq方法的类的Java代码
ASeq
abstract class implements (most of) ISeq
。扩展ASeq
implement ISeq.next()
的类。除了重新实现
ISeq
之外,肯定还有一种更容易实现目标的方法。也许看看Clojure的Java实现会给您一些想法。