请在2024 Clojure 状况调查!中分享您的想法。

欢迎!请参阅关于页面了解有关如何使用本站的更多信息。

+6
Java 互操作
重新标记

目前,into-array 的返回值需要类型提示,并且还必须首先指定目标类。类型提示数组类型也不是那么简单(使用如 ^"[Lorg.clojure.MyClass;" 这样的奇怪且极其冗长的语法)。

如果编译器能为此帮用户处理的话,那就太好了。

2个答案

0

你能提供一个示例吗?

这是一个我在我们生产环境中运行的各种项目中零散看到的示例,是为了与执行数据库迁移的 Java 库(Flyway)进行互操作。

<pre>
;; 当你在Clojure中使用数组(并希望通过使用类型提示来改进性能)时,你必须确保编译器知道数组的类型。原始数组的类型提示为
;; ^longs,^chars,^doubles等;对于对象数组,你必须使用一个
;; 难以处理的结构,如^"[Ljava.lang.String;"
;;
(defn ^:private flyway

  ^Flyway
  [datasource migration-locations]
  (Flyway. (doto ^FluentConfiguration
             (FluentConfiguration.)
             (.dataSource datasource)
             (.locations ^"[Ljava.lang.String;" (into-array String migration-locations)))))
;
by
通常不需要为这类操作提供类型提示(因为数量足够解决)。这个特定的方法具有String[]和Location[]的重载。我并不是不同意您的原始请求,只是在试图阐明它的不同情况。
我认为在没有更多编译器级别支持的情况下完成这个任务是不容易的。

by
最近我遇到的这些
*
netty Http2ServerUpgradeCodec构造函数(Http2FrameCodec,ChannelHandler...)
*
netty ApplicationProtocolConfig构造函数(Protocol,SelectorFailureBehavior,SelectedListenerFailureBehavior,String...)
*
netty SslContextBuilder/forServer (PrivateKey,String,X509Certificate...)
作者:
是的(尽管这只是一个数组重载的例子,但其他数组重载也会出现相同的问题)。
0
作者:
...