JavaFX のコンテキストでは、変更されたときにプロパティが「無効」になるのはどのような意味ですか? この用語を使用する理由がわかりません。
JavaFX プロパティは、監視可能でフィールド値をラップするオブジェクトです。そのため、プロパティが更新されるか無効になると、リスナー/オブザーバーに通知されます。どういう意味ですか?
JavaFX のコンテキストでは、変更されたときにプロパティが「無効」になるのはどのような意味ですか? この用語を使用する理由がわかりません。
JavaFX プロパティは、監視可能でフィールド値をラップするオブジェクトです。そのため、プロパティが更新されるか無効になると、リスナー/オブザーバーに通知されます。どういう意味ですか?
ここで良い説明を見つけました。
intProperty.set(7168) が呼び出されると、otherProperty に対して無効化イベントが発生します。この無効化イベントを受け取ると、otherProperty は単にその値が有効でなくなったことを記録します。intProperty にその値を照会して、その値の再計算をすぐに実行するわけではありません。再計算は、後で otherProperty.get() が呼び出されたときに実行されます。上記のコードのように intProperty.set() を 1 回だけ呼び出す代わりに、intProperty.set() を複数回呼び出す場合を想像してみてください。otherProperty は、その値を 1 回だけ再計算します。
テストの後、この例を見つけました。
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class InvalidMean{
public static void main(String[] args){
IntegerProperty num1 = new SimpleIntegerProperty(15);
IntegerProperty num2 = new SimpleIntegerProperty(10);
// num2.bind(num1);
// num1.set(56);
System.out.println(num2);
}
}
このコードを実行すると、次の出力が得られます。
IntegerProperty [value: 10]
コメント行からコメントを削除します。この出力が得られます。
IntegerProperty [bound, invalid]
num2
新しい値が到着したが、まだ更新されていないため、 の値は無効になります。JavaFX Docが説明しているように、遅延評価のためだけです。
JavaFX バインディングとプロパティの実装はすべて、遅延評価をサポートしています。つまり、変更が発生しても、値はすぐには再計算されません。その後、値が要求された場合、再計算が行われます。
値が有効な呼び出しである必要がある場合は、num2.getValue();
プロパティが有効になるnum2.get();
前に表示されます。System.out.println(num2);
注: 上記の例num2.bind(num1);
では、 bind がすでに の値を変更しており、さらに値を変更しようとしているため、num1.set(56);
両方とも の値を無効にします。num2
num2
set()
それはすべて遅延評価に関するものです。Devoxx 2011 での会議のこのビデオは、この概念を理解するのに大いに役立ちました。
あなたにとって興味深いことは、〜5:00に始まります。