2011-06-18 38 views
0

我试图创建OAuth应用程序,但遇到问题。有没有什么办法可以将字符串转换为任何东西(在这种情况下,我的图书馆强制使用“验证器”,否则非法字符可以发送到服务器)。无法在封闭类型中指定最终变量

这是代码的一部分事项:

final Verifier verifier = null; 
final TextBox txtbxHello = new TextBox(); 
Button btnSubmit = new Button("Submit"); 
    btnSubmit.addClickHandler(new ClickHandler() { 
    public void onClick(ClickEvent event) { 
     verifier = txtbxHello.getValue(); 
    } 
    }); 
Token accessToken = service.getAccessToken(requestToken,verifier); 

和错误是:

Type mismatch: cannot convert from String to Verifier. 

编辑

反正我是能够解决的错误(使用验证者的值)。
谢谢你的帮助。

+1

请理解您的问题与Eclipse无关**。你有非编译代码纯粹简单。如上所述,你不能像你想要做的那样改变最终的变量。相反,也许你想要验证一个班级领域。 –

+0

我试过了,错误是: 无法对静态字段进行静态引用verifierClass.verifier – tgkokk

+1

这表明您需要研究如何创建和使用对象的教程和文本,这是一个基本概念Java编程。您的验证器变量需要是非静态或实例变量,并且您的代码应该在非静态或实例方法中调用。再次,请阅读如何创建和使用实例(非静态)变量和方法,因为在您继续使用Java之前,您需要了解这一点。 –

回答

3

您只能在声明或构造函数中指定最终变量。这就是final关键字的含义 - 变量是只读的。

0

您已将变量“verifier”和“txtBxHello”设置为final(只能分配一次),因此您无法重新分配它们。

这就是编译器所抱怨的。

+0

谢谢! 你可以请更新你的答案,我改变了问题。 – tgkokk

+0

现在的问题是,你正试图设置一个变量类型的“验证”为一种“字符串”(因为那是什么getValue()返回) – Marty

1

验证是最后一个变量,一旦你把它分配任何你不能这么好指定另一个值在一次

+0

我改变了问题,请更新您的答案。 无论如何,感谢您的帮助。 – tgkokk

0

申报,并指定值像上述最终不能分配两次。

为了解决它可能

  • 声明变量“验证”作为实例变量(在一个类,但不以任何方式),因此它可以在匿名类访问而不最终,或

  • 将变量“verifier”声明为对象中的字段并通过setter设置该值。因此你避免了两次赋值final变量。

    final MyVerifier verifier = new MyVerifier(); 
    ... 
    public void onClick(ClickEvent event) { 
        verifier.setValue(txtbxHello.getValue()); 
    } 
    
+0

太好了,但txtbxHello的值是一个字符串,我无法将其转换为Verifier(或您的示例中的MyVerifier)。 – tgkokk

+0

我不知道验证器,但它不是我想这个线程的主题。您可以参考其JavaDoc关于如何使用String构造验证器或创建一个关于它的新问题。 –

0

对于你新的问题,不,你不能一个变量的类型改变,除非到实现该接口的子类,或者一个。

为什么不直接声明“verifier”为String?

0

您可以为最终变量赋值,但编译器必须确保在赋值之前不会访问该变量,也不会重新赋值。 在这种情况下,您的问题是您的代码将按顺序执行,而事件不会。 onClick函数将在未来执行一段时间。 也许你想这样的:

final TextBox txtbxHello = new TextBox(); 
Button btnSubmit = new Button("Submit"); 
btnSubmit.addClickHandler(new ClickHandler() { 
    public void onClick(ClickEvent event) { 
     final Verifier verifier = txtbxHello.getValue(); 
     Token accessToken = service.getAccessToken(requestToken,verifier); 
    } 
}); 

但在另一方面TextBox.getValue()返回一个字符串,并尝试将其分配到一个验证变量。我认为你误解了该库的API。

0

这个错误告诉你到底是什么问题:你已经使你的新的校验变量成为一个“校验器”变量(不管它是什么),并且你试图分配一个从getValue返回的字符串( )方法放入这个变量中。因为只有你有Verifier类的代码,所以你需要检查你是否能以某种方式将String信息添加到变量中。它有一个setText(...)方法吗?你最好不要使用Verifier变量而是一个String变量?