首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java (没有找到匹配的ctor )

java (没有找到匹配的ctor )
EN

Stack Overflow用户
提问于 2016-06-21 19:42:21
回答 2查看 4.2K关注 0票数 3

考虑以下几行Java代码:

代码语言:javascript
复制
final WebClient webClient = new WebClient()
final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");

(取自HTML单元项目的“入门”示例)

这将如何被采纳到Clojure呢?

在添加了所需的依赖项之后,我尝试了以下操作:

代码语言:javascript
复制
(import '[com.gargoylesoftware.htmlunit.html HtmlPage])
(import '[com.gargoylesoftware.htmlunit WebClient])

(let [wc (WebClient.)
      hp (HtmlPage. (.getPage wc "http://www.something.."))]
   ;;...)

但我知道这个错误:

代码语言:javascript
复制
CompilerException java.lang.IllegalArgumentException: No matching ctor found f\
or class com.gargoylesoftware.htmlunit.html.HtmlPage, compiling:(*cider-repl l\
ocalhost*:30:16) 

有人知道为什么吗?

编辑:

正如注释中所指出的,调用HtmlPage的构造函数可能是不必要的。然而,下面的代码也会产生一个错误,尽管是另一个错误:

代码语言:javascript
复制
    (.getPage (WebClient.) "http://htmlunit.sourceforge.net")

IllegalArgumentException Cannot locate declared field class org.apache.http.im\
pl.client.HttpClientBuilder.dnsResolver  org.apache.commons.lang3.Validate.isT\
rue (Validate.java:155) 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-21 19:48:47

这是:

代码语言:javascript
复制
(HtmlPage. (.getPage wc "http://www.something.."))

相当于:

代码语言:javascript
复制
(new HtmlPage (. wc getPage "http://www.something.."))

它相当于这个Java代码:

代码语言:javascript
复制
new HtmlPage(wc.getPage("http://www.something.."))

只需省略额外的构造函数调用:

代码语言:javascript
复制
(.getPage wc "http://www.something..")
票数 5
EN

Stack Overflow用户

发布于 2018-11-02 15:36:07

我想补充一下Sam的回答,真正的问题是Clojure代码的编写方式并不能以与Java代码相匹配的方式定义构造函数。

代码语言:javascript
复制
(ClassA.)

等于

代码语言:javascript
复制
new ClassA();

任何参数都是相同的顺序。

代码语言:javascript
复制
(ClassA. param1 param2)

等于

代码语言:javascript
复制
new ClassA(param1, param2);

点(.)类名在名称调用方法之前创建一个新对象和一个点之后。您也需要对象调用该方法。例如,假设classA是ClassA的一个对象,并具有callMethodNoParams()和callMethod(ClassB param1,ClassC param2)方法。

代码语言:javascript
复制
(.callMethodNoParams classA)

在Java中等效为

代码语言:javascript
复制
classA.callMethodNoParams();

另一个例子是:

代码语言:javascript
复制
(.callMethod classA param1 param2)

在Java中等效为

代码语言:javascript
复制
 classA.callMethod(param1, param2);

另一个在调用方法时创建对象的示例:

代码语言:javascript
复制
classA.callMethod(param1, new ClassC(someParam));

在Java中等效为

代码语言:javascript
复制
(.callMethod classA param1 (ClassC. someParam))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37953243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档