Clojure 创建新Java对象实例化错误

Clojure 创建新Java对象实例化错误,clojure,Clojure,我试图在Clojure中创建一个新的SimpleLineKresolver。这是JavaDoc: 我的clojure代码是: (def lr (new io.prismic.SimpleLinkResolver)) 但在repl中,我得到以下错误: CompilerException java.lang.InstantiationException, compiling:(form-init460449823042827832.clj:1:1) 创建java.util.Date没有问题:

我试图在Clojure中创建一个新的SimpleLineKresolver。这是JavaDoc:

我的clojure代码是:

(def lr (new io.prismic.SimpleLinkResolver))
但在repl中,我得到以下错误:

CompilerException java.lang.InstantiationException, compiling:(form-init460449823042827832.clj:1:1)
创建java.util.Date没有问题:

(def d (new java.util.Date))
=> #'prismic-clojure.core/d
d
=> #inst"2018-03-17T10:30:36.016-00:00"
上面的JavaDoc确实指出SimpleLineKresolver不受欢迎,因为接口LinkResolver()具有默认方法,因此可以直接实现。所以我试着说:

(def lr (new io.prismic.LinkResolver))
CompilerException java.lang.IllegalArgumentException: No matching ctor found for interface io.prismic.LinkResolver,
我得到了这个“no-ctor”错误-我猜这意味着编译器找不到构造函数

问题:

  • 为什么第一次尝试会产生实例化异常
  • 由于不熟悉Java-8默认方法,我将如何使用其默认方法创建新的LinkResolver
  • 谢谢

    为什么第一次尝试会产生实例化异常

    不能实例化抽象类:

    public abstract class SimpleLinkResolver
    
    由于不熟悉Java-8默认方法,我将如何使用其默认方法创建新的LinkResolver

    您需要实现
    LinkResolver
    接口,可以使用Clojure的
    reify

    (def resolver
      (reify LinkResolver
        (^String resolve [this ^Fragment$DocumentLink link]
          "a string"))) ;; put actual impl. here
    (.resolve resolver nil)
    ;; => "a string"
    
    注意:您需要键入hint返回值(和参数),因为
    .resolve()
    是一个重载方法


    另外,您通常会看到
    (类)
    点语法而不是
    (新类)
    来实例化Java类。

    感谢您提供了非常翔实的答案。非常感谢!