是否可以在 Java 中使用通用 Consumer 作为函数参数?

Dru*_*nya 5 java java-8 functional-interface

代码:

public void ifChangedString(String key, Consumer<String> consumer) {
    ...
    consumer.accept(getString(key));
}

public void ifChangedBoolean(String key, Consumer<Boolean> consumer) {
    ...
    consumer.accept(getBoolean(key));
}
Run Code Online (Sandbox Code Playgroud)

是否可以制作单个方法public <T> void ifChanged(String key, Class<T> clazz, Consumer<T> consumer)

显而易见的解决方案是public void ifChanged(String key, Consumer<Object> consumer)但我不想Object用作参数类型,最好使用上述几种方法。

问题是对于accept我需要的方法? super XXX,只有 super 是 Object。那么有可能吗?

Dea*_*ool 2

您可以创建接受类型Tobject 和Consumerof 类型的通用方法T

public <T> void ifChanged(T t, Consumer<T> consumer) {

    consumer.accept(t);

}
Run Code Online (Sandbox Code Playgroud)

您可以通过传递具有相应Consumer操作的任何对象来调用该方法

ifChanged("String", s->System.out.println(s.length()));
ifChanged(10, i->System.out.println(i.toString()));
Run Code Online (Sandbox Code Playgroud)