【问题标题】:Java Generics query [duplicate]Java泛型查询[重复]
【发布时间】:2018-06-05 14:30:16
【问题描述】:

我在 Spring Batch StepBuilder 类中看到了以下方法定义。这里第一个尖括号有什么用?

public <I, O> SimpleStepBuilder<I, O> chunk(int chunkSize) {
    return (new SimpleStepBuilder(this)).chunk(chunkSize);
}

【问题讨论】:

  • 它定义了该方法本地的泛型类型IO
  • 它定义了 IO 类型,在你的情况下,它们随后用于你的返回类型 SimpleStepBuilder&lt;I, O&gt;。这意味着当您通过以下方式调用您的块方法时说:yourObject.&lt;Cat, Dog&gt;.chunk(0),您将收到由CatDog 类型参数化的SimpleStepBuilder 实例,即SimpleStepBuilder&lt;Cat, Dog&gt;
  • 顺便提一下:O 不是(类型)变量的好名字。它在某些字体中看起来很像0

标签: java generics


【解决方案1】:

第一个&lt;I, O&gt; 是类型的定义。您正在定义一个通用“占位符”名称列表(以及可选的它们的约束),然后可以在方法或签名中使用这些名称来代替“真实”类型。

第二个&lt;I, O&gt; 是参数化SimpleStepBuilder。正如您可以将ArrayList 参数化为ArrayList&lt;String&gt; 一样,这里您将SimpleStepBuilder 参数化为两个泛型类型:IO


查看返回字符串的不同方法可能会有所帮助,而是使用泛型类型参数来定义方法的参数:

public <I, O> String chunk(I input, O output) {
    return input.toString() + output.toString();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-26
    • 2010-09-26
    • 2014-01-12
    • 2018-04-27
    • 2015-10-08
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多