为什么我会收到一条错误消息,指出此增强型for循环中的不兼容类型?

时间:2015-03-13 11:22:54

标签: java

有人可以告诉我这段代码有什么问题吗?我无法弄明白...提前谢谢!

 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

1 个答案:

答案 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中具体对象的问题的信息 - 例如填写列表的代码。