标题可能有点令人困惑或误导,但我想比较一个字符串:
String mystring = "abc";
然后尝试将它与arraylist中包含的每个字符串进行比较
ArrayList<String> array = new ArrayList<String>();
array.add("The first letters of the alphabet are abc");
array.add("abc");
array.add("Alphabet");
array.add("Nothing");
我找到了一个课程,唯一重要的是“搜索”方法。
public void Search(ArrayList<Object> objects)
如果您没有注意到,此方法接收对象的arraylist作为参数。现在问题是我上面提到的ArrayList<String> array
是每个这些对象的属性,所以我不能直接遍历我想要的arraylist(也许我可以,但我只是不知道如何)。有没有办法在arraylist中接收对象的属性作为参数,或者在不同的类方法中迭代它?
答案 0 :(得分:1)
您的问题似乎与Java泛型有关。这里使用泛型与ArrayList
一起告诉Java你要在ArrayList
中存储什么类型的对象。如果你想创建一个存储特定种类对象的ArrayList
,比如你在其他地方定义的类MyClass
的实例,那么你可以做
ArrayList<MyClass> myObjs = new ArrayList<MyClass>();
实例化只能包含ArrayList
类型对象的MyClass
。
你提到
我上面提到的ArrayList数组是每个这些对象的属性
我认为您传递到Object
方法的ArrayList<Object>
objects
中包含的Search
是特定类的实例(继续来自早期的例子MyClass
)。该类包含您要作为实例数据迭代的ArrayList<String>
。问题是你没有告诉Java ArrayList<Object>
拥有MyClass
的实例,所以当你从对象中获得某些东西时,Java不知道它是MyClass
类型的。 (具体来说,编译器不知道。)
如果你想访问一个对象的实例数据,那么你将不得不告诉Java你从那里访问那些数据的东西。 Java编译器非常关注对象是什么类型,以及在每个对象上定义了哪些操作。如果您尝试从MyClass
的实例访问实例数据,但编译器认为该实例的类型为Object
,那么编译器将对您非常不满(因为它不知道是否有问题的实例实际上有你试图访问的数据 - 它可能是其他类型的对象!)。您需要做的是告诉编译器您只能在MyClass
中存储ArrayList
的实例,以便编译器知道ArrayList
中的对象具有您想要的实例数据访问。
答案 1 :(得分:0)
我相信您可以在Search方法中创建 Check if an object belongs to a class in Java 。然后你要做的就是将对象强制转换回String对象并完成该方法所需的其他东西。