如何避免Java中列表方法中的代码重复?
下面的方法读取文件并返回特定的列表类型如何避免Java中列表方法中的代码重复?,java,Java,下面的方法读取文件并返回特定的列表类型 List<X> readFile(String file) { List<X> x = new ArrayList<X>(); File f = new File(file); List<String> lines = null; try { lines = Files.readLines(f, Charsets.UTF_8); } catch (I
List<X> readFile(String file) {
List<X> x = new ArrayList<X>();
File f = new File(file);
List<String> lines = null;
try {
lines = Files.readLines(f, Charsets.UTF_8);
} catch (IOException e) {
}
List<X> xList = new ArrayList<X>();
for (String line : lines) {
xList.add(new X(line));
}
return xList;
}
List<Y> readFile(String file) {
List<Y> y = new ArrayList<Y>();
List<String> lines = null;
try {
lines = Files.readLines(f, Charsets.UTF_8);
} catch (IOException e) {
}
List<Y> yList = new ArrayList<Y>();
for (String line : lines) {
yList.add(new Y(line));
}
return yList;
}
列表读取文件(字符串文件){
列表x=新的ArrayList();
文件f=新文件(文件);
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
List xList=new ArrayList();
用于(字符串行:行){
xList.add(新的X(行));
}
返回xList;
}
现在需要一个不同的列表。该方法已被复制,下面返回不同的列表类型
List<X> readFile(String file) {
List<X> x = new ArrayList<X>();
File f = new File(file);
List<String> lines = null;
try {
lines = Files.readLines(f, Charsets.UTF_8);
} catch (IOException e) {
}
List<X> xList = new ArrayList<X>();
for (String line : lines) {
xList.add(new X(line));
}
return xList;
}
List<Y> readFile(String file) {
List<Y> y = new ArrayList<Y>();
List<String> lines = null;
try {
lines = Files.readLines(f, Charsets.UTF_8);
} catch (IOException e) {
}
List<Y> yList = new ArrayList<Y>();
for (String line : lines) {
yList.add(new Y(line));
}
return yList;
}
列表读取文件(字符串文件){
列表y=新的ArrayList();
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
List yList=新的ArrayList();
用于(字符串行:行){
yList.add(新的Y(行));
}
返回yList;
}
问题是该类已被复制。在这种情况下如何避免代码重复
尝试
avoidDuplicatedCode(){
List<Y> y = new ArrayList<Y>();
List<String> lines = null;
try {
lines = Files.readLines(f, Charsets.UTF_8);
} catch (IOException e) {
}
return y
}
avoidDuplicatedCode(){
列表y=新的ArrayList();
列表行=空;
试一试{
lines=Files.readLines(f,Charsets.UTF_8);
}捕获(IOE异常){
}
返回y
}
结果:
- 将方法返回类型设置为“列表”
更改后会出现许多其他问题您可以引入通用参数:
<T> List<T> readFile(String file) {
List<T> list = new ArrayList<T>();
// ...
return list;
}
public void foo() {
List<Integer> l1 = readFile("l1");
List<String> l2 = readFile("l2");
}
列表读取文件(字符串文件){
列表=新的ArrayList();
// ...
退货清单;
}
公共图书馆{
列表l1=读取文件(“l1”);
列表l2=读取文件(“l2”);
}
如果不处理文件中的所有行,那么读取它们有什么意义?这些方法的实际代码是什么?按原样,您可以将第一个替换为new ArrayList()
,将第二个替换为new ArrayList()
。如果您不关心行
列表,那么读取文件有什么意义?关于您的问题:将“something”从String
转换为X
或Y
,然后您只需要一个通用方法。我忘了添加代码中缺少的部分,即将行添加到列表中的部分。感谢您的解释。我遇到的另一个问题是在类中创建了一个新对象。这是否也可以成为泛型(xList.add(新的X(行));
vs。但是有一些解决方法,例如,您可以传递一个创建T作为附加参数的函数