将方法转换为通用方法
Convert a method to a generic one
我创建了以下界面:
public interface ConverterInterface<T, S> {
T convert(String id, S record, String event);
}
我所有的转换器 classes 都在实现这个。假设我有多个转换器 A、B、C、D...
对于实现此接口的每个 class,我都有一个非常相似的加载方法,如下所示:
private void loadA(String id, List<myObjA> objA, String event) {
if (objA == null) {
return;
}
// This is one class that implements that interface (I have multiple classes like this)
MyConverterA converter = ...
// Run over elements, call the converter and save it into an output list
for (myObjA record : objA) {
OUTPUT_LIST_A.add(converter.convertToEntity(id, record, event));
}
}
private void loadB(...) { ... }
private void loadC(...) { ... }
我的目标是将这几种加载方法转换为通用方法,以便我可以根据自己的输入使用相同的方法。
我正在尝试这样的事情:
private <S, T, V> void load (String id, List<S> data, T converter, List<V> output, String event) {
if (data == null) {
return;
}
for (S record: data) {
// Here I need to call the convert method from the interface
output.add()
}
}
有什么想法吗?
谢谢!
如果你想传递列表:
private <S, T> void load (String id, List<S> data, ConverterInterface<T, S> converter, List<T> output, String event) {
if (data == null)
return;
for (S record: data)
output.add(converter.convert(id, record, event));
}
否则,如果你只传入输入,你可以使用 Stream API 和 map
:
private <S, T> List<T> load (String id, List<S> data, ConverterInterface<T, S> converter, String event) {
if (data == null)
return Collections.emptyList();
return data.stream()
.map(record -> converter.convert(id, record, event))
.collect(toList());
}
关键是你只需要两个泛型参数,S
和 T
并且可以指定 Converter<S,T>
作为参数类型(如果需要可以添加方差)。
我创建了以下界面:
public interface ConverterInterface<T, S> {
T convert(String id, S record, String event);
}
我所有的转换器 classes 都在实现这个。假设我有多个转换器 A、B、C、D...
对于实现此接口的每个 class,我都有一个非常相似的加载方法,如下所示:
private void loadA(String id, List<myObjA> objA, String event) {
if (objA == null) {
return;
}
// This is one class that implements that interface (I have multiple classes like this)
MyConverterA converter = ...
// Run over elements, call the converter and save it into an output list
for (myObjA record : objA) {
OUTPUT_LIST_A.add(converter.convertToEntity(id, record, event));
}
}
private void loadB(...) { ... }
private void loadC(...) { ... }
我的目标是将这几种加载方法转换为通用方法,以便我可以根据自己的输入使用相同的方法。
我正在尝试这样的事情:
private <S, T, V> void load (String id, List<S> data, T converter, List<V> output, String event) {
if (data == null) {
return;
}
for (S record: data) {
// Here I need to call the convert method from the interface
output.add()
}
}
有什么想法吗?
谢谢!
如果你想传递列表:
private <S, T> void load (String id, List<S> data, ConverterInterface<T, S> converter, List<T> output, String event) {
if (data == null)
return;
for (S record: data)
output.add(converter.convert(id, record, event));
}
否则,如果你只传入输入,你可以使用 Stream API 和 map
:
private <S, T> List<T> load (String id, List<S> data, ConverterInterface<T, S> converter, String event) {
if (data == null)
return Collections.emptyList();
return data.stream()
.map(record -> converter.convert(id, record, event))
.collect(toList());
}
关键是你只需要两个泛型参数,S
和 T
并且可以指定 Converter<S,T>
作为参数类型(如果需要可以添加方差)。