小编Nic*_*ray的帖子

泛型:无法从Collections.emptyList()转换为List <String>

为什么

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>"

java generics collections empty-list

8
推荐指数
1
解决办法
5099
查看次数

限制哪些值可以在javafx属性中解决?

将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属性中的任何内容?

(如果有必要,请帮助我改进本文中可能不好的英文...)

java javafx properties javafx-2

6
推荐指数
1
解决办法
1033
查看次数

标签 统计

java ×2

collections ×1

empty-list ×1

generics ×1

javafx ×1

javafx-2 ×1

properties ×1