我有一个问题,我似乎找不到任何地方的答案。我有两种几乎相同的方法,两种方法之间的区别在于它们是不同的对象。

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;
}

10-08 17:00