我有一个对文件系统执行读写操作的接口。现在的问题是我如何使这个界面同时兼顾List和T。
import java.io.IOException;
import java.util.List;
public interface Operations<T> {
void save(T serializableObject) throws IOException;
List<T> get() throws IOException;
}
上述代码既适用于Operations<List<User>>
,也适用于Operations<User>
。
如果我有重载方法,我将有一个重复的代码
@Override
public void saveCollection(List<T> serializableObjects) throws IOException {
String jsonData = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(serializableObjects);
BufferedWriter br = new BufferedWriter(new FileWriter(file));
br.write(jsonData);
br.close();
}
@Override
public void save(T serializableObject) throws IOException {
String jsonData = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(serializableObject);
BufferedWriter br = new BufferedWriter(new FileWriter(file));
br.write(jsonData);
br.close();
}
答案 0 :(得分:3)
添加接受T
void save(T serializableObject) throws IOException;
void save(Collection<T> listOfTs);
答案 1 :(得分:1)
如果您担心代码重复,为什么不简单地将常用实现放入一个单独的私有方法中,并使用现有的重载将其参数转发给它?
private void saveImpl(Object serializableObject) throws IOException {
String jsonData = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(serializableObject);
BufferedWriter br = new BufferedWriter(new FileWriter(file));
br.write(jsonData);
br.close();
}
@Override
public void save(List<T> serializableObjects) throws IOException {
saveImpl(serializableObjects);
}
@Override
public void save(T serializableObject) throws IOException {
saveImpl(serializableObject);
}
答案 2 :(得分:0)
您可以使用varargs。该方法可能如下所示:
void save(T... objects) throws IOException;
然后可以用
调用obj.save(myArgument)
obj.save(myFirstArgument, mySecondArgument)
obj.save(new MyArgumentType[]{myFirstArgument, mySecondArgument})