Java对象 "cannot be dereferenced"

标签 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);

这是我使用 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]                                    ^

com.gargoylesoftware.htmlunit.html.HtmlInput 无法取消引用?我见过自动装箱的取消引用问题,但对象没有。在这种情况下这意味着什么?为什么代码以一种方式工作而不是以另一种方式工作?

最佳答案

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

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

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

当你写下:

HtmlInput usernameInput = form.getInputByName("username");

-> 类 I 隐式是一个 HtmlInput。

但是当你写:

form.getInputByName("password").setValueAttribute(passWord);

-> 无法明确找到 I 类。

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

form.<HtmlInput>getInputByName("password").setValueAttribute(passWord);

-> 这迫使 I 成为 HtmlInput。

诚挚地, 杰罗姆。

关于Java对象 "cannot be dereferenced",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749394/

相关文章:

java - 如何阅读使用未知的随机所有者密码创建的 PDF?

htmlunit - 如何关闭 htmlunit 的详细报告?

java - HtmlUnitDriver 中预期的内容类型为 'application/javascript'

java - String.toLowerCase 中的 StackOverflowError

Java:正确引用 ETag 的例程?

java - 如何为给定 Class 子类型的数组返回 Class 的实例?

Java从文本文件中读取

java - android 中的 SimpleDateFormat 错误

java - 如何找到一个元素的前 N ​​个 sibling

java - 点击后 Htmlunit 不重定向