首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将一个类型化的集合从clojure传递到java?

如何将一个类型化的集合从clojure传递到java?
EN

Stack Overflow用户
提问于 2010-09-11 06:12:14
回答 2查看 6.8K关注 0票数 16

我知道clojure/java互操作的基础:从clojure调用java,反之亦然。但是,我无法将clojure中的类型化集合返回到java。我正在尝试从调用到clojure的java代码中看到某种性质的List<TypedObject>

Java Object:

public class TypedObject {
    private OtherType1 _prop1;
    public OtherType1 getProp1() {
        return _prop1;
    }
    public void setProp1(OtherType1 prop1) {
        _prop1 = prop1;
    }
}

CLojure method:

(defn -createListOfTypedObjects
      "Creates and returns a list of TypedObjects"
      [input]
      ;Do work here  to create and return list of TypedObjects
      [typedObj1, typedObj2, typedObj3])

(:gen-class
 :name some.namespace
 :methods [createListofTypedObjects[String] ????])

让我们考虑一下,我正在使用clojure编写一个API,它将作为一个jar文件分发,以便在java中使用。我的问题真的是如何传递什么来代替?上面的问题标记在:gen-class for AOT中,以便程序员使用我的api在java中编写一段代码,可以从eclipse中获得适当的智能感知/代码完成(例如:createListofTypedObjects() returns List<TypedObject>)。

EN

回答 2

Stack Overflow用户

发布于 2010-09-11 09:12:21

如果你想把像List<String>这样的东西传递给一个java方法,那么你不用担心。类型参数(例如,String)仅供javac编译器使用,因此任何List在运行时都会工作得很好。

另一方面,如果您试图传递一个特定对象类型的数组(例如,String[]),那么您可以使用各种-array函数:

user=> (make-array String 10)            ; an empty String array
#<String[] [Ljava.lang.String;@78878c4c>
user=> (into-array ["foo" "bar"])        ; array type inferred from first element
#<String[] [Ljava.lang.String;@743fbbfc>
user=> (into-array Number [1.2 5 7N])    ; explicit type array
#<Number[] [Ljava.lang.Number;@7433b121>
票数 10
EN

Stack Overflow用户

发布于 2010-09-11 09:13:10

您不需要担心Clojure中的泛型(类型化集合)。泛型实际上只是Java编译器的类型提示。在运行的Java程序中,List<String>实际上与List<Object>相同。

因此,例如,一个包含String的Clojure向量已经是一个不需要转换的List<String>

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3688730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档