0

这是我的代码(一个例子):

(def foo (.java_method java_object))
(debug "result of method bar() on object foo: " (.bar foo))

我收到警告(foo属于FooTypeJava 类型):

Reflection warning, example/test.clj:2 - call to bar can't be resolved

我可以使用此类型提示删除警告:

(def foo (.java_method java_object))
(debug "result of method bar() on object foo: " (.bar ^FooType foo))

这行得通,但我每次使用foo. 另一种解决方案是使用let,但它会创建额外的缩进级别,我想避免这种情况。有没有可能做类似的事情?:

(def foo (.java_method java_object))
(set-type foo FooType)
(debug "result of method bar() on object foo: " (.bar foo))
4

2 回答 2

1

不。要将编译时元数据(如类型提示)与命名值相关联,请使用 let。

于 2013-02-15T07:49:12.900 回答
1

您可以将类型提示与def.

(def ^FooType foo (.java_method java_object))

更新:

例子:

user=> (set! *warn-on-reflection* true)
true
user=> (import java.util.Hashtable)
java.util.Hashtable
user=> (def ^Hashtable table (Hashtable.))
#'user/table
user=> (.put table "one" 1)
nil
user=> (.put table "two" 2)
nil
于 2013-02-15T08:34:10.193 回答