我知道clojure /
java互操作的基础:从clojure调用Java,反之亦然。但是,我无法将类型的集合从clojure返回到Java。我试图List<TypedObject>
从正在调用clojure的Java代码中看到这种性质的东西。
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,该API将作为jar文件分发,可以从Java使用。我的问题确实是如何代替???AOT的:gen-
class里面有问号,因此,例如,使用我的api在Java中编写一段代码的程序员可以createListofTypedObjects() returns List<TypedObject>
在eclipse中进行适当的intellisense /代码完成(即:)。
其他人是对的,Clojure不能确保返回的集合中元素的类型,等等。(实际上,JVM也不能确保集合中元素的类型,这完全由javac处理。)
但是,我看到了向其他Java程序员提供API的价值,该API指定了一个接口,该接口声明以各种方式对参数化的返回值(或参数)进行了参数化;如果人们希望在现有的Java环境中使用Clojure而不产生麻烦,那么这将特别有吸引力。
当前,这需要两步过程:
gen-class
命名空间(或proxy
或reify
实例),使得它实现该接口(Clojure确实提供了一种definterface
格式,可以避免使用单独的Java接口定义,但是definterface
,与Clojure的其余部分一样,Clojure也没有提供指定参数化类型的方法。也许有一天…
:-))
例如
public interface IFoo {
List<TypedObject> createListOfTypedObjects ();
}
然后是您的gen-class名称空间:
(ns your.ns.FooImpl
(:gen-class
:implements [IFoo]))
(defn -createListOfTypedObjects
[]
[typedObj1, typedObj2, typedObj3])
当您的用户创建的实例时FooImpl
,他们将例如获得代码完成,表明该方法返回List<TypedObject>
而不Object
是非参数化List
类型。
如果您使用健全的构建工具(例如maven,gradle或正确配置的ant),则可以将Java接口放入Clojure项目中,并将处理跨语言依赖性。
问题内容: 这是我的基本功能: 此功能能够连接并在我的数据库上执行查询… 我想创建相同的功能,但更通用。…前一个仅用于一个表(),新表必须能够接受查询的参数作为输入,以及将在其中执行查询的类类型。这将允许我仅使用一行来执行查询。 应该是这样的: 您发现我不知道如何“通用”代码… 我希望已经清楚了… PS 应该是DB()中表的类的代表。 谢谢。 问题答案: 如果您打算返回结果集,请使用:
问题内容: 我有主片段,我想传递给类,在这里我将在ListView中显示结果。 片段类: 我有资料 现在,我想将“ allStudents”对象发送到新的活动类StudentResult();中。 我在片段类中使用: 在目标类中显示ListView()中的对象; 提前致谢! 问题答案: 在您的Fragment中创建一个自定义界面: 在您的活动中实现此接口: 现在,您必须重写声明的方法(在中): 然
我是新的TypeScript和我正在努力写HOC与typecheck。这是我的HOC: 它抛出一个错误: 类型(组件:反应。组件类型 我完全不知道如何继续使用这段代码,也不知道如何让它工作。 有什么想法吗?
我正在尝试按房间类别(手术室或技术室)返回过滤后的
我在C中有一个函数,我需要在Java中创建一个包装器。该函数期望FILE类型的输入参数(来自标准输入输出)。我不相信Swig可以在Java中自动适应一个接口,而不需要在Swig接口文件中进行一些手动工程-我可能错了。 这是我所拥有的 C(标题h): 我尝试过编译,但结果是创建了Swig指针类型:SWIGTYPE_p_FILE,这无助于我将FILE type参数从Java传递到C。
问题内容: 我在形成文字时可能做错了。假设我有一个简单的存储过程,如下所示: 的定义为: 执行这样的查询: 产生以下结果集: 代替: 我的文字是否有问题,还是应该以其他方式访问该字段?感谢您的任何建议。 问题答案: 指定输入的方式看起来不错,因为使用行和数组构造器语法可以观察到相同的行为: 和: 产生: 如果添加: 在循环内部,输出为: 表明您实际上正在获取一个元组,其中“ message”是您期