java - usando - SimpleStringProperty set() vs. setValue()
binding usando javafx (2)
StringProperty.java:
@Override
public void setValue(String v) {
set(v);
}
StringPropertyBase.java:
@Override
public void set(String newValue) {
if (isBound()) {
throw new java.lang.RuntimeException("A bound value cannot be set.");
}
if ((value == null)? newValue != null : !value.equals(newValue)) {
value = newValue;
markInvalid();
}
}
En el caso común, puede abrir fuentes desde open javafx y ver eso.
¿Cuál es la diferencia entre set(String)
y setValue(String)
en la clase SimpleStringProperty
?
Sé que set(String)
se deriva de StringPropertyBase
, pero esto me hace aún más asombroso, ¿por qué también hay setValue(String)
?
set/setValue
y get/getValue
existen para alinear las propiedades del Objeto con propiedades de tipos primitivos como BooleanProperty
o DoubleProperty
:
Propiedad booleana:
void set(boolean value)
void setValue(java.lang.Boolean v)
DoubleProperty:
void set(double value)
void setValue(java.lang.Number v)
En estas clases de propiedades, los métodos ___Value
funcionan con los objetos de tipo correspondientes, mientras que los métodos directos trabajan con tipos primitivos.
Mirando en el código puede encontrar un poco de diferencia en la lógica. Por ejemplo, DoubleProperty#setValue(null)
es igual a DoubleProperty#set(0.0)
(que fue requerido por el enlace). Por lo general, recomiendo usar los métodos set / get y dejar setValue / getValue a las necesidades de enlace, ya que pueden incorporar lógica adicional.
Para las propiedades de Objeto / Cadena no hay diferencia entre los métodos set y setValue.