这是我的代码(例子):
(def foo (.java_method java_object))
(debug "result of method bar() on object foo: " (.bar foo))
我收到警告(foo
在Java中的类型为FooType
):
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))
答案 0 :(得分:1)
没有。要将类型提示等编译时元数据与命名值相关联,请使用let。
答案 1 :(得分: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