在Clojure中键入提示nil文字

Ale*_*lex 6 null clojure type-hinting

当传递的参数是文字时,一个类型提示函数如何调用函数调用nil?我遇到了一种情况,我试图用多个单参数构造函数代理Java类,例如:

public class MyClass {
  public MyClass(String a) {...}
  public MyClass(List b) {...}
}
Run Code Online (Sandbox Code Playgroud)

我想调用为我的代理接受字符串参数的构造函数,但是为该参数传递一个null值.只需致电:

(proxy [MyClass] [nil] ...)
Run Code Online (Sandbox Code Playgroud)

抛出一个异常,因为Clojure找到了多个构造函数,并且不知道要调用哪个构造函数.但是尝试添加类型提示,如下所示:

(proxy [MyClass] [^String nil] ...)
Run Code Online (Sandbox Code Playgroud)

使用"元数据只能应用于IMetas"消息抛出异常.足够公平 - 在阅读nil文字时,读者无需附加元数据.那么我该如何解决这个问题呢?我能够提出一个涉及的解决方案let,但它似乎相当kludgy:

(let [NIL! nil]
  (proxy [MyClass] [^String NIL!] ...))
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

Art*_*ldt 1

可悲的是没有,

我不知道还有什么更好的办法。有时我proxy在函数中进行调用,然后调用它,尽管这相当于您使用let