Одним из возможных способов было бы связать тип элемента массива с параметром универсального типа и связать процессор и массив на раннем этапе:
public class ArrayProcessingWrapper<T> {
private final T[] array;
private final ArrayProcessor<T> processor;
public ArrayProcessingWrapper(T[] array, ArrayProcessor<T> processor) {
super();
this.array = array;
this.processor = processor;
}
public void processArray() {
this.processor.process(this.array);
}
}
Другим способом может быть использование функций
public abstract class Processor<T> {
private final Supplier<T[]> arraySupplier;
public Processor(final Supplier<T[]> arraySupplier) {
super();
this.arraySupplier = arraySupplier;
}
public T[] createArray() {
return this.arraySupplier.get();
}
public void processNewArray() {
this.doProcess(this.createArray());
}
protected abstract void doProcess(T[] data);
}
public class BooleanProcessor extends Processor<Boolean> {
public BooleanProcessor(Supplier<Boolean[]> arraySupplier) {
super(arraySupplier);
}
@Override
protected void doProcess(Boolean[] data) {
// Do fancy boolean stuff...
}
}
Но взгляните также на Iterable<E>
и / или Collection<E>
(из которых ArrayList<E>
- это то, что ведет себя как массив) вместо массивов.
Для меня кажется недостатком дизайна, если вам нужно использовать другую логику («процессоры») в зависимости от типа (времени выполнения) массива.