gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:31 25 4
gpt4 key购买 nike

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

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 - 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) ,并告诉编译器您将只传递满足该条件的对象,您可以使用 <T extend TimeSlot>哪里TimeSlot是一个接口(interface)。

<小时/>

方法 2 - Inheritance

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类(class)扩展ParentObject

<小时/>

如果您不希望获得有关这两种方法的更多指导,请告诉我,我将详细说明答案。

关于java:如何在不知道对象类型的情况下调用arraylist上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44855298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com