Generics 用于处理泛型参数的JDK接口

Generics 用于处理泛型参数的JDK接口,generics,interface,java,java-7,Generics,Interface,Java,Java 7,JDK是否有这样一个接口: public interface Callback<T> { public void process(T t); } 公共接口回调{ 公共无效过程(T); } 要求实现一个运行代码但不返回任何内容的回调 我可以自己编写(只需使用这里的示例代码),但如果存在的话,我想使用现有的轮子,而不是重新发明轮子。不,我认为目前没有这样的接口。在JDK 8中,目前计划有这样一个接口,称为Block(我认为它使用了apply方法)。。。尽管名称在现在和那时之间

JDK是否有这样一个接口:

public interface Callback<T> {
    public void process(T t);
}
公共接口回调{
公共无效过程(T);
}
要求实现一个运行代码但不返回任何内容的回调


我可以自己编写(只需使用这里的示例代码),但如果存在的话,我想使用现有的轮子,而不是重新发明轮子。

不,我认为目前没有这样的接口。在JDK 8中,目前计划有这样一个接口,称为
Block
(我认为它使用了
apply
方法)。。。尽管名称在现在和那时之间可能会发生变化。

它被称为注释处理。定义API,它是JDK 6的一部分。你可以从和开始。

所以你需要像

interface Foo<T>
    bar(T)
接口Foo
巴(吨)
JDK中只有3个接口是这样的

java.nio.file.DirectoryStream$Filter<T>

    boolean accept(T entry) throws IOException;


java.lang.Comparable<T>

    int compareTo(T o);


javax.xml.ws.Provider<T>

    T invoke(T request);
java.nio.file.DirectoryStream$Filter
布尔接受(T项)抛出IOException;
java.lang.com
int compareTo(to);
javax.xml.ws.Provider
T调用(T请求);
显然你不会喜欢它们的

异步IO有一个回调接口,但有点复杂:

java.nio.channels.CompletionHandler<V,A>

    void completed(V result, A attachment);

    void failed(Throwable exc, A attachment);
java.nio.channels.CompletionHandler
已完成作废(V结果,附件);
作废失败(可丢弃的exc,附件);

这里真正的问题是为什么?为什么您认为为此定义接口比使用Java提供的接口更糟糕?你会得到什么?您将无法选择合适的名称。我想就是这样。如果有理由使用Java库提供的现有接口,您可能已经知道它的名称,因为您知道要与库的哪个部分进行接口。
用一种方法创建一个接口并不是重新发明轮子。

这看起来像Guava的,只是允许函数返回一些东西。因此,它看起来像一个

public interface Callback<T> extends Function<T, Void> {
}
公共接口回调扩展函数{
}

不是JDK的一部分,但是现在Guava非常常用,您可能会发现它很方便。

根据我的经验,JDK中没有现成的接口。泛型在Java游戏中出现得较晚。在此之前,需要以半类型安全的方式将几个类型化参数传递给回调,而不需要事先了解这些参数的结构(我称之为“半类型安全”,因为创建事件侦听器是为了测试事件的类型并根据需要进行强制转换)。如果没有泛型,您就不可能构建这种机制,而且他们从来没有重新构建整个JDK来考虑泛型(除了collections API和其他一些)。这将是一项巨大的事业,收效甚微(毕竟,一切都如期进行)

因此,在JDK库中普遍存在的观察者/监听器模式(请参见
java.util.EventObject
java.util.EventListerner
及其用法)。Java还认为,在实现
EventListener
时,在接口定义过程中要更加详细一些。为了更清晰的实现,该模式的专门实现应该使回调方法名称显示代码的用途(通常也与事件名称匹配)。例如,
ActionEvent#actionPerformed(ActionEvent E)

缺少该接口的另一个可能原因是JDK本身没有使用它。有时,您希望
回调
其他调用
回调
甚至
回调
等等。在没有任何实际is用例(JDK内部)的情况下提供这些接口实际上不是一个很好的设计策略。缺乏对这些有用构造的支持是Guava和ApacheCommons(以及其他)存在的主要原因


无论如何,我同意@JB Nizet的说法,你应该用番石榴。我们没有详细说明为什么以及如何使用该界面,因此留下了很大的猜测空间,但不管是什么原因,Guava可能会有其他可能派上用场的功能。

如果您想应用Observer设计模式,Java自JDK 1.0以来就在其标准库中支持它。您正在寻找的接口是java.util.Observer。模式的另一面是java.util.Observable类。基本上,您可以扩展java.util.Observable,然后注册您的观察者(据我所知,一个观察者可以同时观察多个观察者)。这是非常古老的东西,所以请注意:没有泛型。

我使用Callable()在java中实现回调/函子

interface Callable<V> {
    public V call();
}
接口可调用{
公共V-call();
}
您可以使用java.util.concurrent中的Executors内容来处理这个问题。

在Java8中,执行器完全是您想要的

它有一个非默认方法,该方法接受泛型类型,但不返回任何内容:

public interface Consumer<T> {

    void accept(T t);

    default Consumer<T> andThen(Consumer<? super T> after) {
        // ...
    }
}        
公共接口使用者{
无效接受(T);

默认消费者,然后(ConsumerReh?你可能需要提供更多的信息,才能让这个答案有所帮助。@edwardw注释处理与这个问题到底有什么关系?你提交的答案有没有错?@Bohemian哦,那我误读了你的问题。那么你已经回答了你自己的问题。为什么要费心回答这个问题呢第一个地方?让我详细说明一下。注释处理API是一个回调机制。它是用来处理一般注释的。适合这个帐单,对吗?如果是的话,我会认为你的问题是微不足道的或误导的。@如果你找到一个<代码>接口<代码>(或抽象类),请参阅EDWARDW。这符合我问题的要求,在这里发布,我接受你的答案!(告诉我一个使用回调的框架并不能真正回答我的问题)那么你怎么知道只有3个这样的接口呢?如果你解析javadocs,我会+1你,否则我不认为你能确定这一点