我创建了一个包含子类类型的List。为什么我不能调用子类中定义的方法?
int desktopID = 0;
Random randomID = new Random();
List<MessageHandler> test = null;
for(int i = 0; i < 1000; i++){
desktopID = randomID.nextInt(10);
System.out.println(desktopID);
test.storeMessage("Message Number: "+ i, desktopID);
}
System.out.println(test.getRecentMessage(desktopID).toString());
答案 0 :(得分:0)
一些背景
不清楚你的要求是什么......但它听起来就像你想知道为什么你不能从你的列表MessageHandler
调用test
中定义的方法1}}类型List<MessageHandler>
。
javadoc中List<E>
的定义解释了参数E是列表可以包含的类型。例如,add(E e)
方法将从此继承,并且只允许将类型为E
的项添加到列表中。 not 的含义是,您可以从E
对象调用类List<E>
中定义的方法。
例如,我不能写这个(.getRGB()
is a method from the Color Class):
List<Color> colorList = new ArrayList<>;
colorList.getRGB();
但是我可以写这个。请注意我是如何将Color
对象添加到列表中并从列表中获取它以调用其上的方法:
List<Color> colorList = new ArrayList<>;
colorList.add(Color.Red);
colorList.get(0).getRGB();
回答您的问题
这对您来说意味着您不应该在列表.storeMessage(...)
上呼叫.getRecentMessage(...)
和test
。相反,您应该创建类型为MessageHandler
的对象,在其上调用store方法,然后将其添加到列表中。完成后,您可以再次遍历列表,从列表中获取每个对象,然后输出消息。
试试这个:
int desktopID = 0;
Random randomID = new Random();
// Note that I'm instantiating the list before using it!
List<MessageHandler> test = new Arraylist<>;
for(int i = 0; i < 1000; i++){
desktopID = randomID.nextInt(10);
System.out.println(desktopID);
// Create a MessageHandler object and set the message.
MessageHandler handler = new MessageHandler();
handler.storeMessage("Message Number: "+ i, desktopID);
// Add that method to your list
test.add(handler);
}
// This is a foreach loop. Very useful! Will iterate over each element in order.
for(MessageHandler handler : test){
System.out.println(handler.getRecentMessage(desktopID).toString());
}
(我假设你的MessageHandler对象有一个默认的构造函数。)