Javowe FiXowanie i niezaincjowane komponenty
Pracuję sobie nad aplikacją JFXS, która będzie pobierała z serwera xml i wstawiała zawarte w nim informacje do panelu. Napisałem sobie obiekt, który będzie odpowiadał za połączenie z serwerem. Generalnie ma on metodę call, która przyjmuje listę parametrów i ich wartości. Na ich podstawie tworzy url i wysyła żądanie. W trakcie pracy natknąłem się jednak na ciekawą właściwość JFXS. Otóż nie ma w nim NullPointerException!
I jak tu pracować?
Na początek przykładowy kod:
Listing 1. Kod z niezainicjowaną zmienną
/*
* Main.fx
*/
package eu.runelord;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import eu.runelord.communication.DataGetter;
import javafx.scene.input.MouseEvent;
import java.lang.System;
/**
* @author koziolek
*/
var getter : DataGetter;
Stage {
title: "Application title"
width: 800
height: 600
scene: Scene {
content: Text {
font: Font {
size: 24
}
x: 10,
y: 30
content: "Application content"
onMouseClicked: function( e: MouseEvent ):Void {
System.out.println("cliked");
getter.call(["a"], ["a"]);
}
}
}
}
Pomimo, że zmienna getter nie została zainicjowana nie otrzymamy żadnego wyjątku. Metoda call() nie zostanie wywołana.
Odpowiedź na zadane pytanie można zawrzeć w poniższej liście:
- Pisać dokumentację, w której będzie podane co jest a co nie jest inicjowane
- Inicjować zmienne i pola na wartościach domyślnych ręcznie
- Tworzyć „czyste” pliki klas. Pliki takie powinny zawierać tylko kod klasy bez dodatkowych zmiennych poza blokiem class.
Deklaratywna składnia JFXS pozwala na dużą swobodę, a kompilator wybaczyć może wiele dziwnych konstrukcji. Nie zwalnia to nas jednak z odpowiedzialności za kod, który tworzymy.