Clojure :调用摘要 class 的 java subclass
Clojure : call a java subclass of abstract class
我今天遇到了一个问题,因为我不知道如何调用扩展子类的 java class。我知道嵌套 class 有 $ 符号,但我迷路了。
为了更清楚,这里是 classes :
摘要class:
子class :
老实说,我忘记了很多关于 java 的事情,但我看到子 class 没有构造函数。问题是我必须使用子类。
这是代码
(defn apache-logistic-reg [data x0 lamb]
(let [f (Logistic$Parametric.)
start (def-start x0 lamb)
fitter (.create SimpleCurveFitter. f start)
points (double-array (extract-points data))]
(.fit fitter points)))
问题是我无法调用 SimpleCurveFitter。因为它没有构造函数。并且 AbstractCurveFitter 没有 .create,如果我没记错的话 abstract classes 不能被转换。
如果我没记错的话,SimpleCurveFitter 的构造函数应该有它的抽象名称 class 但也许我错了。
我该怎么办?
谢谢你
您不需要在 SimpleCurveFitter
中调用构造函数,因为它提供了静态方法 create
来为您获取实例(您已经在尝试使用该实例)。只需对该方法进行静态方法调用即可获取实例:
(.create SimpleCurveFitter f start) ;; No '.' after SimpleCurveFitter
(. SimpleCurveFitter create f start) ;; Alternate syntax
(SimpleCurveFitter/create f start) ;; Most common syntax (pointed out by amalloy)
我今天遇到了一个问题,因为我不知道如何调用扩展子类的 java class。我知道嵌套 class 有 $ 符号,但我迷路了。
为了更清楚,这里是 classes :
摘要class:
子class :
老实说,我忘记了很多关于 java 的事情,但我看到子 class 没有构造函数。问题是我必须使用子类。
这是代码
(defn apache-logistic-reg [data x0 lamb]
(let [f (Logistic$Parametric.)
start (def-start x0 lamb)
fitter (.create SimpleCurveFitter. f start)
points (double-array (extract-points data))]
(.fit fitter points)))
问题是我无法调用 SimpleCurveFitter。因为它没有构造函数。并且 AbstractCurveFitter 没有 .create,如果我没记错的话 abstract classes 不能被转换。
如果我没记错的话,SimpleCurveFitter 的构造函数应该有它的抽象名称 class 但也许我错了。
我该怎么办?
谢谢你
您不需要在 SimpleCurveFitter
中调用构造函数,因为它提供了静态方法 create
来为您获取实例(您已经在尝试使用该实例)。只需对该方法进行静态方法调用即可获取实例:
(.create SimpleCurveFitter f start) ;; No '.' after SimpleCurveFitter
(. SimpleCurveFitter create f start) ;; Alternate syntax
(SimpleCurveFitter/create f start) ;; Most common syntax (pointed out by amalloy)