0

これは私のコードです(例):

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

警告が表示されます(Javafooのタイプです):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))
4

2 に答える 2

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 に答える
1

いいえ。型ヒントなどのコンパイル時のメタデータを名前付きの値に関連付けるには、let を使用します。

于 2013-02-15T07:49:12.900 に答える