1

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

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

以上是该方法的一个示例,但其中一些已被删除。粗体(包含在**中)文本是不同的部分。所以我有两种完全一样的方法,我可以使用泛型来消除对两种不同方法的需要吗?

4

2 回答 2

2

假设您可以控制您的对象类,这是可能的: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;
}
于 2013-10-20T02:38:19.353 回答
0

泛型适用于这些类中的类和方法;至少,谈论泛型是令人困惑的,因为它们仅与方法相关。

如果您有一个类具有适用于不同其他类的有用方法,那么您可以使用泛型来定义该类并实例化该类的对象以处理不同的参数类型。例如,您可以考虑一个 ArrayList,这样您就可以拥有一个 ArrayList 和一个 ArrayList。然后列表中需要用于实例化数组列表的类的各种方法适用于传入的类。

我希望这是一个帮助。

于 2013-10-20T02:43:25.590 回答