我有一个问题,我似乎找不到任何地方的答案。我有两种几乎相同的方法,两种方法之间的区别在于它们是不同的对象。
public static **Object[]** readFile(**Object[]** inObj){
for(int i = 0; i < inObj.length ; i++){
inObj[i] = new **Object()**;
String str = objectInput.nextLine();
inObj[i].**setObjectLine**(str);
}
return inObj;
}
上面是该方法的示例,但是其中一些已被删除。粗体(用**包围)文本是不同的部分。
所以我有两种完全一样的方法,是否有可能使用泛型来消除对两种不同方法的需要?
最佳答案
假设您可以控制对象类,那么这是可能的:Java具有支持实例化的特定用法,并且您应该能够添加公共接口来支持setObjectLine
调用。
interface WithSetLine {
void setObjectLine(String str);
}
public static <T extends WithSetLine> T[] readFile(T[] inObj, Class<T> cl)
throws Exception
{
for(int i = 0; i < inObj.length ; i++) {
inObj[i] = cl.newInstance();
String str = objectInput.nextLine();
inObj[i].setObjectLine(str);
}
return inObj;
}