Một Java gọi phương thức có thể được tham số như trong đoạn mã sau:Khi nào một cuộc gọi phương thức tham số có ích?
class Test
{
<T> void test()
{
}
public static void main(String[] args)
{
new Test().<Object>test();
// ^^^^^^^^
}
}
tôi phát hiện ra đây là có thể từ hộp thoại thiết lập Eclipse Java Formatter và tự hỏi nếu có bất kỳ trường hợp này rất hữu ích hoặc theo yêu cầu.
EDIT
Dựa trên câu trả lời tuyệt vời Arne của tôi đã đưa ra kết luận sau:
Ngoài cải thiện an toàn kiểu như ví dụ Arne của minh họa một phương pháp gọi tham số cho phép bạn chỉ định các loại cơ sở chung của các đối số phương thức phải là loại phần tử vùng chứa. Kiểu này thường được biên dịch tự động bởi trình biên dịch với kiểu cơ sở chung cụ thể nhất. Bằng cách tham số hóa phương thức gọi hành vi này có thể bị ghi đè. Một cuộc gọi phương thức tham số có thể được yêu cầu nếu có nhiều kiểu phổ biến bị trình biên dịch suy luận.
Ví dụ sau đây cho thấy hành vi đó:
import java.util.Arrays;
import java.util.List;
class Test
{
public static void main(String[] args)
{
Integer a=new Integer(0);
Long b=new Long(0);
List<Object> listError=Arrays.asList(a, b);
//error because Number&Comparable<?> is not Object
List<Object> listObj=Arrays.<Object>asList(a, b);
List<Number> listNum=Arrays.<Number>asList(a, b);
List<Comparable<?>> listCmp=Arrays.<Comparable<?>>asList(a, b);
}
}
Hành vi này được định nghĩa trong Java Language Specification Third Edition đoạn 8.4.4 và 15.12.2.7 nhưng không dễ hiểu.
chỉ là nó với tôi rằng nghĩ đó là lạ thế nào tất cả mọi người trong chủ đề này dường như nghĩ rằng một "phương pháp tham số" phải là một phương pháp chung chung? Phương thức có tham số được khai báo là phương thức "được tham số hóa". Một phương thức chung chung chỉ là một phương thức được tham số hóa khác, trong đó kiểu là một tham số như vậy. Hay tôi đã bỏ lỡ điều gì đó? –
Bạn đang phát hiện! Trong tầm nhìn, tiêu đề có thể đã là "Khi nào một phương thức gọi với các đối số kiểu mà không thể suy ra hữu ích?" –