java:如何在不知道对象类型的情况下调用arraylist上的方法

时间:2017-06-30 21:52:28

标签: java object arraylist

我有一个intersect方法,它接受两个包含相同类型对象的ArrayLists,并返回两个列表中的对象列表。

public static ArrayList<TimeSlot> intersectTS(ArrayList<TimeSlot> List1, ArrayList<TimeSlot> List2)
{
    ArrayList<TimeSlot> intersection = new ArrayList<TimeSlot>();
    for(TimeSlot TS1 : List1)
    {
        for(TimeSlot TS2 : List2)
        {
            if(TimeSlot.Equals(TS2,TS1))
            {
                intersection.add(TS2);
            }
        }
    }
    return intersection;
}

现在它只能接受TimeSlot对象,我必须为我想要使用此方法的每个其他类型的对象创建一个几乎相同的方法。

有没有办法在一种方法中做到这一点?

由于

1 个答案:

答案 0 :(得分:0)

方法1 - Generics

public static <T extends TimeSlot> ArrayList<T> intersectTS(ArrayList<T> List1, ArrayList<T> List2)
{
    ArrayList<T> intersection = new ArrayList<T>();
    for(T TS1 : List1)
    {
        for(T TS2 : List2)
        {
            if(TimeSlot.Equals(TS2,TS1))
            {
                intersection.add(TS2);
            }
        }
    }
    return intersection;
}

现在假设您传入的通用对象具有方法Equals(T, T),并告诉编译您只能传递满足该条件的对象,您可以使用{{1}其中<T extend TimeSlot>是一个接口。

方法2 - Inheritance

TimeSlot

此方法假设您有一个对象public static ArrayList<ParentObject> intersectTS(ArrayList<ParentObject> List1, ArrayList<ParentObject> List2) { ArrayList<ParentObject> intersection = new ArrayList<ParentObject>(); for(ParentObject TS1 : List1) { for(ParentObject TS2 : List2) { if(ParentObject.Equals(TS2,TS1)) { intersection.add(TS2); } } } return intersection; } ,其方法为ParentObject,而您的Equals(ParentObject, ParentObject)类扩展为TimeSlot

如果您对这两种方法有更多指导,请告诉我,我会扩展答案。