public static <T> T foo(T x, T x2) {
return (T) (x + " " + x2);
}
public static void main(String args[]) {
System.out.println(foo(33, "232"));
}
Tôi biết T là loại được chuyển trong tham số. Nhưng ở đây có hai loại. Cái nào trong số đó là T?Tại sao mã chung này trong biên dịch java?
và tại sao trình biên dịch không bắt buộc tôi phải có các thông số cùng loại khi tôi gọi foo?
Đó là hợp pháp vì 'T' có thể là' Đối tượng', vì vậy bạn có thể chuyển phương thức cho bất kỳ hai đối tượng nào. ('32' có thể là' Số nguyên' thay vì 'int' trong trường hợp này.) – khelwood
Và giới hạn trên của' T' là 'Đối tượng', vì vậy trong mã được biên dịch, ký tự' (T) 'là' (Object) ', là hợp lệ, bởi vì' String' là một 'Object'. –
Ngoài ra để thêm vào các ý kiến, đó là lý do tại sao bạn không bao giờ muốn sử dụng các loại undbound (để lại các generics), như cơ bản mọi sự kết hợp của các lớp là hợp lệ do nó. Khi bạn làm điều đó, bạn có thể thấy mình trong một sitatation, nơi 'ClassCastExceptions' là kết quả bình thường khi cố gắng làm việc với các kiểu thô – SomeJavaGuy