Bạn đã viết:
Tôi muốn sử dụng nó (hoặc một cái gì đó tương tự) để có phương pháp của tôi chấp nhận một số lập luận, mỗi trong số đó là thành viên của một số khác nhau cho trước lớp.
Tôi không nghĩ rằng có thể thực hiện điều này một cách an toàn mà không gặp phải một số lỗi xấu, như bao gồm một thể hiện của Class cùng với đối tượng.
Vấn đề là, với VarArgs bạn đang thực sự được truyền trong một mảng. Nhưng bạn không thể có một mảng với các loại đối tượng khác nhau, tất cả chúng phải giống nhau (hoặc các lớp con, vì vậy nếu bạn có X [] y thì mỗi phần tử phải là một phân lớp của X)
Nếu chức năng của bạn thực sự có thể đối phó với nhiều loại, bạn có thể tạo ra một cái gì đó giống như một lớp học lưu trữ một thể hiện của Class cùng với một thể hiện của T, và vượt qua trong một danh sách var args của container đó.
Vì vậy, ví dụ bạn có thể có
class TypedInstance<T>{
Class<T> type;
T instance;
}
và sau đó có một chức năng mà trông giống như
public whatever(TypedInstance<? extends Object>... whatever){
...
doSomethingWith(whatever[0].type, whatever[0].instance);
...
}
Những loại hacks là cần thiết vì loại chô bôi Java. Tham số chung được loại bỏ trong thời gian chạy, vì vậy nếu bạn muốn sử dụng nó, bạn phải đặt nó trở lại.
Nguồn
2012-01-03 18:20:19
Có gì sai với những gì bạn đã có cho đến nay? Vấn đề duy nhất là varags không chơi khủng khiếp độc đáo với generics. –