gpt4 book ai didi

java - 如何使用迭代器从通用 ArrayList 中获取对象?

转载 作者:行者123 更新时间:2023-12-02 09:09:00 24 4
gpt4 key购买 nike

我尝试创建一个具有 ArrayList 属性的类。我需要使用泛型和迭代器获取不同的对象。当我从迭代器获取对象时出现问题。这是代码:

import java.util.*;

public class PruebaIterator{
public static void main(String[] args) {

A<B> myList = new A<B>();

myList.aad(new B());
myList.aad(new B());

myList.showList();


A<C> myList2 = new A<C>();

myList2.aad(new C());
myList2.aad(new C());

myList2.showList();
}
}

class A<T>{
private ArrayList<T> list;

public A(){
list = new ArrayList<T>();
}

public void aad(T val){
list.add(val);
}

public void showList(){
Iterator it = list.iterator();
while(it.hasNext()){
T obj = (T)it.next(); //Here: how to get different objects
obj.showData();
}
}
}

class B{
private String data;

public B(){
data = new String("B");
}

public void showData(){
System.out.println(data);
}
}

class C{
private String dat;

public C(){
dat = new String("C");
}

public void showData(){
System.out.println(dat);
}
}

我已经尝试过 Actor ,但我什么也没有。但是,如果我仅在注释行中将 T 更改为 B,则运行 myList 而不是 myList2 (我理解这一点)。那么,如何从类 B 和 C 中获取对象并从这两个类中调用 showData 方法呢?谢谢。

最佳答案

使用polymorphism 。您可以引入一个接口(interface)。该接口(interface)将由您想要在 A 类中使用的每个类实现。

例如:

interface Show {
void showData();
}

之后您只需更改此:

class B implements Show {
...
class C implements Show {
...
class A<T extends Show> {
...

方法showList可以原样。或者你可以简化它:

public void showList() {
list.forEach(obj -> obj.showData());
}

甚至:

public void showList() {
list.forEach(Show::showData);
}

更新

使用class A<T extends Show> {需要对代码进行较少的更改。直接用接口(interface)替换即可。然后它看起来像这样:

class A{
private ArrayList<Show> list;

public A(){
list = new ArrayList<Show>();
}

public void aad(Show val){
list.add(val);
}

public void showList(){
list.forEach(Show::showData);
}
}

PruebaIterator :

...
A myList = new A();
...
A myList2 = new A();
...

关于java - 如何使用迭代器从通用 ArrayList 中获取对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59557228/

24 4 0