有人可以告诉我这段代码有什么问题吗?我无法弄明白...提前谢谢!
public void writeMessage(String message) {
System.out.println("Recieved: " + message);
for (PrintWriter out : connections) { //<-- incompatible types
out.println(message);
out.flush();
}
}
在评论
中添加了来自OP的connections
代码
上面的代码是名为Mediator
的类的一部分,该类有一个名为connections
的成员和构造函数,如下所示:
public class Mediator {
private LinkedList connections;
/*** Constructor creates the list that maintains the connections */
public Mediator() {
connections = new LinkedList();
}
// ... Rest of class code
答案 0 :(得分:0)
目前,您的代码无法知道connections
将包含PrintWriter
类型的对象。实际上 - 列表中的Iterable
将返回Object
类型的对象,因此您的编译器抱怨类型不匹配。
collections
确实包含PrintWriter
个对象如果您确定只将PrintWriter
类型的对象放在connections
LinkedList中,那么您应该添加Generic类型PrintWriter
。所以,你的班级现在看起来像:
public class Mediator {
private LinkedList<PrintWriter> connections;
/*** Constructor creates the list that maintains the connections */
public Mediator() {
connections = new LinkedList<PrintWriter>();
}
// ... Rest of class code
这将允许您的writeMessage()
方法按预期运行。
如果您需要有关使用Generic类型的一些信息(如果您在Java中使用Collections
List
很有用),那么一个好的起点是Java Generics tutorial,这解释了它们如何工作并将该方法与铸造物体形成对比。
collections
不包含PrintWriter
个对象的解决方案如果是这种情况,您会对enhanced for
loop syntax的工作方式产生更深的误解。如果out
实现PrintWriter
,您只能指定connections
具有Iterable<PrintWriter>
类型 - 即迭代时它将返回PrintWriter
个对象。
如果不是这种情况,但您仍然需要将message
写入LinkedList connections
的每个成员,那么您将需要确定每个成员的类型,它们是否都是相同的具体类型或不同以及如何写入每个对象。您不能强制他们的行为PrintWriter
为了帮助解决这个问题,我们需要更多关于connections
中具体对象的问题的信息 - 例如填写列表的代码。