有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java设置列表<?扩展接口1>

尝试做一些类似于:

public interface Order {      
    public List<? extends OrderItem> getItems();  
    public void setItems(List<? extends OrderItem> items);  
}  

public interface OrderItem {  
  // stuff
}  

public class OrderItemImp implements OrderItem {  
  // stuff for class impl
}  

public class OrderImp implements Order {  
    public List<OrderItemImp> getItems() {  
        return items;  
    }  
    public void setItems(List<OrderItemImp> items) {  
        this.items = items;  

    }  
}

编译器抱怨setItems方法。我怎样才能做到这一点?谢谢


共 (2) 个答案

  1. # 1 楼答案

    Order接口定义中,这些方法看起来像一对get/set方法,即逻辑上是一个属性。在这种情况下,他们需要有相同的类型。您需要通过命名类型参数将它们连接在一起:

    public interface Order<T extends OrderItem> {      
        public List<T> getItems();  
        public void setItems(List<T> items);  
    }
    

    不完全确定这在Java中是否是正确的语法,但基本上这两个方法都必须引用完全相同的类型

  2. # 2 楼答案

    试着替换

    public void setItems(List<? extends OrderItem> items);  
    

    public <T> void setItems(List<T extends OrderItem> items);
    

    。现在是generic method