Java对象"无法解除引用"

Spi*_*ams 2 java htmlunit

我正在使用一个库 - HtmlUnit - 我刚刚从2.4版更新到2.5版.当我编译我的代码2.5时,我得到一个奇怪的对象"无法解除引用"错误消息,我不熟悉.此外,我不明白为什么当我用两行代码编写代码时它会起作用,但是当我把代码作为单行代码时它会失败.

这是代码:

//this compiles fine
HtmlInput usernameInput = form.getInputByName("username");
usernameInput.setValueAttribute(userName);

//this fails to compile
form.getInputByName("password").setValueAttribute(passWord);
Run Code Online (Sandbox Code Playgroud)

这是我使用ANT和Java 1.6编译时得到的错误消息:

[javac] E:\workspaces\europa\PortalTestSuite\src\com\carefirst\portal\test\controller\EAITest.java:32: com.gargoylesoftware.htmlunit.html.HtmlInput cannot be dereferenced
[javac]         form.getInputByName("password").setValueAttribute(passWord);
[javac]                                    ^
Run Code Online (Sandbox Code Playgroud)

com.gargoylesoftware.htmlunit.html.HtmlInput无法解除引用?我已经看到了Autoboxing的derefernce问题,但没有看到对象.在这种情况下它意味着什么?为什么代码以一种方式而不是另一种方式工作?

小智 5

事实上,这是另一个问题.

API是public final <I extends HtmlInput> I getInputByName(String name) throws ElementNotFoundException.

这意味着该方法返回I(I extends HtmlInput)的实例.

当你写:

HtmlInput usernameInput = form.getInputByName("username");
Run Code Online (Sandbox Code Playgroud)

- >类I隐式是HtmlInput.

但是当你写:

form.getInputByName("password").setValueAttribute(passWord);
Run Code Online (Sandbox Code Playgroud)

- >我无法明确找到我的课程.

如果你想要它的工作,你必须写:

form.<HtmlInput>getInputByName("password").setValueAttribute(passWord);
Run Code Online (Sandbox Code Playgroud)

- >这迫使我成为HtmlInput.

亲切地,Jérôme.