2013-04-24 25 views
7

Tôi đã đọc java Generics, tôi đã xem qua một truy vấn thú vị. Câu hỏi của tôi là như sau.Java Generics cho Upper bound & lower bound cards hoang dã

  1. Đối với một ký tự đại diện bị chặn trên

    public static void printList(List<? extends Number> list) { 
        for (int i = 0; i < 10; i++) { 
         list.add(i);// gives compilation error 
        } 
    } 
    
  2. Đối với một kí hiệu wildcard bao thấp hơn

    public static void printList(List<? super Integer> list) { 
        for (int i = 0; i < 10; i++) { 
         list.add(i);// successfully compiles 
        } 
    } 
    

Tôi đang bối rối với điều này bởi vì nhìn vào giấy tờ Sun Oracle Tôi hiểu rằng mã nên biên dịch cho điểm 1 cũng như

Upper Bound Wildcard Lower Bound Wildcard

Có thể ai giúp tôi hiểu điều này không?

+0

@baraky: cảm ơn vì liên kết Tôi đã bỏ lỡ bằng cách nào đó ... nhưng câu hỏi vẫn là tại sao nó không biên dịch khi loại Chung biết rằng nó phải là một lớp mở rộng theo Số. Xin lỗi vì câu hỏi dư thừa. Nó vẫn chưa rõ ràng cho tôi. – chaosguru

Trả lời

7

Điều này là do khi bạn đang sử dụng trên ràng buộc, bạn không thể thêm các yếu tố để thu thập, chỉ đọc chúng.

điều này có nghĩa rằng đây là một số bài tập pháp luật:

List<? extends Number> l = new ArrayList<Integer>(); 
List<? extends Number> l = new ArrayList<Double>(); 

vì vậy bạn không thể đảm bảo rằng khi thêm đối tượng, nó sẽ giữ đúng kiểu của các đối tượng. để giải thích tốt hơn, vui lòng theo dõi: How can I add to List<? extends Number> data structures?

1

thực sự, may mắn thay cùng một kịch bản, tôi nhận được câu trả lời trong các trang tiếp theo của tài liệu Sun Oracle. vui lòng tìm liên kết bên dưới. có thể hữu ích cho những người sẽ tìm kiếm trong tương lai.

Wildcard Capture

Các vấn đề liên quan