Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用捕获_Java_Generics_Wildcard_Predicate - Fatal编程技术网

Java 通用捕获

Java 通用捕获,java,generics,wildcard,predicate,Java,Generics,Wildcard,Predicate,我想弄明白为什么编译器会抛出 测试(捕获想象一下,您将整数(它是可序列化的)传递给谓词(它是扩展可序列化的)?这是毫无意义的 谓词#test()充当消费者,因此您需要使用谓词我通常不会在泛型中处理?,但是在泛型中的赋值右侧有?不是被禁止的吗?隐式的操作符是什么?在更改之后,我不能在谓词中使用我的数据,因为它应该是?超级可序列化的。由于我自己保持映射中的类型同步,我现在切换到谓词和TaggedData的包装器对象列表。我使用了T数据,谓词 private Map<Predicate<?

我想弄明白为什么编译器会抛出


测试(捕获想象一下,您将
整数
(它是
可序列化的
)传递给
谓词
(它是
扩展可序列化的
)?这是毫无意义的


谓词#test()
充当消费者,因此您需要使用
谓词我通常不会在泛型中处理
,但是在泛型中的赋值右侧有
不是被禁止的吗?隐式的
操作符是什么?在更改之后,我不能在谓词中使用我的数据,因为它应该是
?超级可序列化的
。由于我自己保持映射中的类型同步,我现在切换到谓词和TaggedData的包装器对象列表。我使用了T数据,谓词
private Map<Predicate<? extends Serializable>, TaggedData<? extends Serializable>> scheduledData = new HashMap<>();

public synchronized <T extends Serializable> void conditionalSend(String tag, T data, Predicate<T> condition) {
    scheduledData.put(condition, new TaggedData<T>(tag, data));
    scheduledData.entrySet()
                 .stream()
                 .filter(e -> e.getKey().test(e.getValue().getData()))
                 .forEach(e -> send(e.getValue()));
}
class TaggedData<T extends Serializable> implements Serializable {
    private static final long serialVersionUID = 1469827769491692358L;

    private final String tag;
    private final T data;

    TaggedData(String tag, T data) {
        this.tag = tag;
        this.data = data;
    }

    String getTag() {
        return tag;
    }

    T getData() {
        return data;
    }
}