在Clojure中实例化SimpleLinkResolver时遇InstantiationException错误求助
解决Clojure创建SimpleLinkResolver实例时的InstantiationException问题
嘿,我来帮你搞定这个问题~你遇到的InstantiationException其实是因为io.prismic.SimpleLinkResolver没有无参构造函数,而java.util.Date刚好自带无参构造方法,所以你能顺利创建它的实例。
报错原因
SimpleLinkResolver是专门用来处理Prismic文档链接解析的类,它的设计逻辑要求你在创建实例时必须提供链接解析的具体实现——要么传入一个处理链接的函数,要么继承它并重写核心的解析方法。你直接用无参的new调用,JVM找不到对应的构造方法,自然就抛出实例化异常了。
解决方案
根据这个类的设计规范,有两种常用的方式在Clojure中创建它的实例:
方式1:使用带函数参数的构造函数
如果SimpleLinkResolver提供了接收Function<String, String>类型参数的构造函数,你可以直接传递一个Clojure函数作为解析逻辑:
(def lr (io.prismic.SimpleLinkResolver. (fn [raw-link] ;; 这里编写你的链接处理逻辑,比如给原始链接添加路由前缀 (str "/app" raw-link))))
方式2:通过proxy继承并重写resolve方法
要是SimpleLinkResolver是抽象类(要求重写resolve方法),你可以用Clojure的proxy宏动态创建子类实例:
(def lr (proxy [io.prismic.SimpleLinkResolver] [] (resolve [link] ;; 这里实现自定义的解析逻辑,比如根据link对象的ID生成对应URL (str "/content/" (.getId link)))))
验证实例
创建完成后,在REPL中直接输入lr,应该就能看到实例对象,不会再抛出异常啦~
内容的提问来源于stack exchange,提问作者Zuriar
相关产品推荐
相关产品推荐

