【问题标题】:Spring Batch reader using generics使用泛型的 Spring Batch 阅读器
【发布时间】:2016-02-11 04:14:47
【问题描述】:

我只是 Spring 架构的新手,我想知道是否可以在 ItemStreamReader 中使用通用 T(o 你想要的)。

类似这样的:

public class Reader implements ItemStreamReader<T extends SomeClass>{
    public T read() {
    .......
    }
    public void open() {
    .......
    }
    public void update() {
    .......
    }
    public void close() {
    .......
    }
}

所以我将扩展 SomeClass 的各种对象传递给读者。

【问题讨论】:

    标签: spring generics spring-batch reader


    【解决方案1】:

    这应该可行:

    public class Reader<T extends SomeClass> implements ItemStreamReader<T>{
        public T read() {
        .......
        }
        public void open() {
        .......
        }
        public void update() {
        .......
        }
        public void close() {
        .......
        }
    }
    

    像这样使用它:

    Reader<SomeClass> reader = new Reader<>();
    Reader<ExtendedFromSomeClass> reader2 = new Reader<>();
    

    【讨论】:

      【解决方案2】:

      我建议您先阅读有关 java 泛型的内容。

      http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#What 是参数化(或泛型)类型?

      但是如果你定义你的类

      public class Reader implements ItemStreamReader<SomeClass>{
          public SomeClass read() {
          .......
          }
          public void open() {
          .......
          }
          public void update() {
          .......
          }
          public void close() {
          .......
          }
      }
      

      您的方法可以返回任何属于 SomeClass 的子类的对象。

      例如

      Reader a = new Reader();
      Subclass b = (Subclass)a.read();
      

      【讨论】:

      • Mmm.. 我的目标是避免强制转换.. 我发现要正确实现类需要不止一个泛型。它变成了类似于public abstract class Reader&lt;T extends XInterface&lt;R&gt;, R extends Y, S extends Z&lt;S, R&gt;&gt; implements ItemStreamReader&lt;T&gt; 的东西,其中 XYZ 是类或接口。但是感谢该指南很有帮助!
      猜你喜欢
      • 1970-01-01
      • 2019-05-04
      • 2019-06-04
      • 2014-02-24
      • 2012-09-19
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多