Clojure:调用抽象类

时间:2016-02-23 15:44:36

标签: java clojure subclass

我今天遇到问题,因为我不知道如何调用扩展子类的java类。我知道有嵌套类的$符号,但在这里我输了。

更清楚,以下是课程:

抽象类:

http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/fitting/AbstractCurveFitter.html

子类:

http://commons.apache.org/proper/commons-math/apidocs/org/apache/commons/math3/fitting/SimpleCurveFitter.html

老实说,我忘记了很多关于java的事情,但我发现子类没有构造函数。问题是我必须使用子类。

这是代码

(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,另外如果我记得很好,抽象类也不能被强制转换。

如果我记得很清楚,SimpleCurveFitter的构造函数将具有其抽象类的名称,但也许我错了。

我该怎么办?

谢谢你

1 个答案:

答案 0 :(得分:2)

您不需要在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)