泛型方法参数 - Java

我有两个几乎相同的方法,但我试图避免代码重复。

他们每个人都将一个唯一的对象作为参数,并从中找出最高值。

下面是一个示例:

public Integer getHighestIndexValue(List<ObjectA> list) {
    int highestValue;
    List<Integer> indexes = new ArrayList<Integer>();
    for (ObjectA a: list) {
        indexes.add(Integer.parseInt(a.getA()));
    }
    highestValue = Collections.max(indexes);

    return highestValue;

} 

艺术

public Integer getHighestIndexValue(List<ObjectB> list) {
    int highestValue;
    List<Integer> indexes = new ArrayList<Integer>();
    for (ObjectB b: list) {
        indexes.add(Integer.parseInt(b.getB()));
    }
    highestValue = Collections.max(indexes);

    return highestValue;

}  

如何使用通用参数组合这两者?

我尝试创建一个包含这两个类的类,并在方法签名中对其进行扩展。仍然需要铸造。BaseClass

public <T extends BaseClass> Integer getHighestIndexValue(List<T> objectList) {
    int highestValue;
    List<Integer> indexes = new ArrayList<Integer>();

    for (T objects: objectList) {
        indexes.add(Integer.parseInt(objects.getAorB())); ------ this line needs casting
    }
    highestValue = Collections.max(indexes);

    return highestValue;

}

我以前使用过泛型,但还没有使用泛型参数。

有没有办法解决这个问题?


答案 1

可以组合成一个单一的接口方法吗?getAgetB

例如:

interface ProvidesIndex {
  Integer getIndex();
}

现在,您只需调用 ,您的方法签名将是:getIndex

public Integer getHighestIndexValue(List<? extends ProvidesIndex> list) 

作为旁注,如果您定义要扩展的接口,即:Comparable<ProvidesIndex>

interface ProvidesIndex extends Comparable<ProvidesIndex>

然后,您可以直接在初始列表上使用:Collections.max

List<ProvidesIndex> list = new ArrayList<ProvidesIndex>();
list.add(new ObjectA());
list.add(new ObjectB());
Integer max = Collections.max(list).getIndex();

答案 2

添加到拉曼的答案中:

public Integer getHighestIndexValue(List<? extends CommonInterface> list) {
    int highestValue;
    List<Integer> indexes = new ArrayList<Integer>();

    for (CommonInterface a: list) {
        indexes.add(Integer.parseInt(a. getIndex()));
    }

    highestValue = Collections.max(indexes);

    return highestValue;
}