设置列表<! - ?扩展Interface1 - >

时间:2009-10-14 22:14:54

标签: java generics

尝试做类似的事情:

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 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:-1)

尝试替换

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

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

。现在是generic method

相关问题