2015-05-08 13 views
6

Tôi có đoạn code saugiá trị Null trong phương pháp tham số

import java.util.List; 

public class Sample { 

    public static void main(String[] args) { 
     test(null); 
    } 

    static void test(List<Object> a){ 
     System.out.println("List of Object"); 
    } 
    static void test(Object a){ 
     System.out.println("Object"); 
    } 
} 

và tôi đã theo sản lượng trong giao diện điều khiển

List of Object 

Tại sao không gọi này test(Object a)? Bạn có thể giải thích làm thế nào "Danh sách" là null?

+2

Có liên quan: [Lựa chọn phương pháp quá tải dựa trên loại thực của tham số] (http://stackoverflow.com/q/1572322/1065197), [Phương pháp quá tải và chọn loại cụ thể nhất] (http://stackoverflow.com/q/9361639/1065197). –

Trả lời

7

Tóm lại, phương pháp cụ thể nhất trong số các quá tải được chọn.

Trong trường hợp này, phương pháp cụ thể nhất là phương pháp mất List<Object> vì đây là loại phụ của Object.

Thuật toán chính xác mà Java sử dụng để chọn các phương thức quá tải khá phức tạp. Xem Java Language Specification section 15.12.2.5 để biết chi tiết.

4

Luôn cụ thể trước, trong các trường hợp như vậy. Nếu bạn thay đổi List thành String, nó sẽ in cùng một thứ. Mỗi lớp là con của Object, vì vậy nếu nó phải quá tải, sẽ là lớp học cụ thể hơn.

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