java - 如何声明字段级类型参数?

标签 java generics

在下面的代码片段中,我想指定:

  1. attachmenthandler共享一个通用类型 `
  2. <A>的类型只需要在 notify() 时指定被调用
  3. 调用 notify()是可选的。

我不想强制用户指定 <A>在类 build 时间,因为他们可能永远不会结束调用 notify() .

/**
 * Builder pattern for some asynchronous operation.
 */
public class OperationBuilder
{
  private A attachment = null;
  private CompletionHandler<Integer, A> handler = null;

  public <A> OperationBuilder notify(A attachment, CompletionHandler<Integer, A> handler)
  {
    this.attachment = attachment;
    this.handler = handler;
    return this;
  }

  public abstract build();
}

这在 Java 下可行吗?如果没有,您会建议我做什么?

更新:我不需要指定 <A>attachment 有关和 handler必须相同<A>notify() 有关.我要说明的是 attachmenthandler必须使用相同的类型 <A> .

最佳答案

您可以做的最接近的事情是让 notify() 返回一个类型为 A 的桥接对象。沿着这些线的东西:

  public class OperationBuilder
  {

    public Bridge<A> OperationBuilder notify(A a, CompletionHandler<Integer, A> h)
    {
       return new Bridge<A>(a, h);
    }

    protected abstract<A> void build(Bridge<A> b);



    public class Bridge<A>
    {
        private A attachment;
        private CompletionHandler<Integer, A> handler;

        public Bridge(A a, CompletionHandler<Integer, A> h)
        {
           attachment = a;
           handler = h;
        }


        public void build()
        {
           build(this); // Will invoke OperationBuilder.build()
        }               
    }
  }

关于java - 如何声明字段级类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095627/

相关文章:

java - 如果不是所有公共(public)事物都是 JavaDoc,如何强制编译警告?

python - 让 mypy 接受泛型类型的子类型作为方法参数

java - 泛型:确保参数的类型相同

java - 连接到 HDInsight (Azure) 上安装的 Kafka

c# - 如何通过代码自动/模拟 Java Applet 的用户导航?

c# - 处理泛型和静态类型之间的交互

java - 为什么封闭类不包含在内部类构造函数的泛型参数中?

ios - 快速在通用类中实现协议(protocol)

java - 如果使用 Android 适配器,如何设置数组中的文本颜色?

java - 将 AES Java 解密代码移植到 Node.js