7

JavaFX のコンテキストでは、変更されたときにプロパティが「無効」になるのはどのような意味ですか? この用語を使用する理由がわかりません。

JavaFX プロパティは、監視可能でフィールド値をラップするオブジェクトです。そのため、プロパティが更新されるか無効になると、リスナー/オブザーバーに通知されます。どういう意味ですか?

4

2 に答える 2

9

ここで良い説明を見つけました。

ここに画像の説明を入力

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);両方とも の値を無効にします。num2num2set()

于 2016-06-16T20:50:31.473 に答える
0

それはすべて遅延評価に関するものです。Devoxx 2011 での会議のこのビデオは、この概念を理解するのに大いに役立ちました。

あなたにとって興味深いことは、〜5:00に始まります。

于 2015-01-30T15:14:51.193 に答える