为什么
public List<String> getList(){
if (isMyListOKReady())
return myList;
return Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)
汇编得很好,但是
public List<String> getList(){
return isMyListReady() ? myList : Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)
Eclipse说"Type mismatch: cannot convert from List<Object> to List<String>"?
将javafx属性的值保持在特定范围内的最佳方法是什么?
(或者 - 这是一种不好的做法,是否有任何理由永远不会过滤由javafx属性包装的值?)
示例1:避免IntegerProperty中的负值示例2:将IntegerProperty
的值保持在List的范围内
第一个想法: - 覆盖IntegerPropertyBase.set(int).它是安全的?实际上setValue(int)只是调用set(int),但是 - 如果这个实现有一天发生变化 - 对值集的控制就会丢失.
第二个想法: - 覆盖IntegerPropertyBase.invalidate().但此时已经设定了价值.
它是否更适合javafx属性抛出IllegalArgumentException(或者ArrayIndexOutOfBoundsException,如果包装的值是数组的索引),或者更好地拒绝超出边界的值,设置边界中的最后一个值?
也许是这样的:
class BoundedIntegerProperty extends IntegerPropertyBase {
(...)
int oldValue = defaultValueInBounds;
boolean settingOldValue = false;
public void invalidated() {
if(!settingOldValue){
if(outOfBounds(get())){
settingOldValue = true;
set(oldValue);
} else {
oldValue = get();
}
} else
settingOldValue = false;
}
}
Run Code Online (Sandbox Code Playgroud)
只有在invalidated()中抛出一个Exception,才能使超出范围的值保持属性的值超出范围.
我是否忽略了为过滤值提供的javafx属性中的任何内容?
(如果有必要,请帮助我改进本文中可能不好的英文...)