Spring Batch reader с использованием дженериков

Я просто новичок в архитектуре spring, и мне интересно, можно ли использовать общий T (что вы хотите) в ItemStreamReader.

Что-то вроде этого:

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

Итак, я передаю читателю различные объекты, расширяющие SomeClass.


person adellinho    schedule 10.11.2015    source источник


Ответы (2)


это должно работать:

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<>();
person Hansjoerg Wingeier    schedule 11.11.2015

Я рекомендую вам сначала прочитать о дженериках 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();
person reos    schedule 10.11.2015
comment
Ммм... моя цель состояла в том, чтобы избежать кастинга... работая над этим, я увидел, что для правильной реализации класса необходимо более одного универсального. Это становится чем-то вроде public abstract class Reader<T extends XInterface<R>, R extends Y, S extends Z<S, R>> implements ItemStreamReader<T>, где XYZ — это классы или интерфейсы. Но спасибо, руководство помогло! - person adellinho; 10.11.2015