次のコードを使用して「initialTextを解決できません」というメッセージが表示されるのはなぜですか? isItAは、テキスト領域に貼り付けようとしているテキストのタイプ(AまたはB)に応じて、ユーザーが以前に選択したブール値です。 initialTextには2つの潜在的な文字列があり、出力されるものはboolean isItAに依存します。私はif/else文の外でinitialTextを使うと、なぜこのエラーが出るのか分からない。 'if/else'ステートメントの中にある場合、コンパイラは文字列を右から外すことができますか?私は現在、IntelliJでGWTを使用しています。この時点で私はまだJavaでnoobのようなので、なぜこれが起こっているの基本的な説明は非常に高く評価されるだろう:)事前に感謝します。コードのスニペットは次のとおりです。if/elseステートメントを使用しているときに 'シンボルを解決できません'
答えて
initialTextは、指定されたコードブロックスコープ内にないため、復元不能です。この問題を解決するには
、そのような場合/ else文の前にintitalTextを宣言:あなたのfinal String initialText
外のif-elseブロックを、それを宣言し、その中に初期化するよりも、if-else
block.Soに対してローカルであるので
protected TextArea getNewTextArea() {
if (newTextArea == null) {
final String initialText;
if (isItA){
initialText = "Please paste valid text A here, and then
press" + "the \"" + Labels.ADD_A_BUTTON_TEXT + "\" button.";
}else{
initialText = "Please paste valid text B here, and then press " + "the \"" + Labels.ADD_B_BUTTON_TEXT + "\" button.";
}
newTextArea = new TextArea();
newTextArea.setText(initialText);
newTextArea.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
// If the text is still the original text, then clear it.
if (newTextArea.getText().equals(initialText)) {
newTextArea.setText("");
}
}
});
}
これを行う方法はありますので、私は '** final ** String initialText;'としてそれを保持できますか?そのコードブロックの後にその文字列を変更しないようにしたいのですが。 –
initialText(それが定義されている方法)は最終的なものかもしれません。私はこれで答えを更新しました。 –
おかげで:)私は今それを得る –
。
initialTextはcurliesブロック内にのみ存在します。
あなたは、機能ブロック
保護のTextArea getNewTextArea(){
String initialText ...
の始まり、それがそうであるならば、あなたはあなたの2番目の宣言でinitialTextを上書きすることができwouldntの下に右にinitialTextを移動する必要がありますそれは最終的なものです。 – HRgiger