Có thể đưa một đối tượng trong Java vào một loại chung kết hợp không?Tôi nên truyền cho Java chung với nhiều giới hạn như thế nào?
Tôi có một phương pháp như:
public static <T extends Foo & Bar> void doSomething(T object) {
//do stuff
}
Gọi phương pháp này là không có vấn đề nếu tôi có một lớp mà thực hiện cả hai giao diện (Foo & Bar).
Vấn đề là khi tôi cần gọi phương thức này, đối tượng tôi cần truyền cho nó được nhận là java.lang.Object
và tôi cần truyền nó để làm cho trình biên dịch hài lòng. Nhưng tôi không thể tìm ra cách làm cho dàn diễn viên này.
chỉnh sửa:
Vấn đề nằm ở một chức năng như thế này:
public void problemFunction (Object o) {
if (o instanceof Foo && o instanceof Bar) {
doSomething((Problematic cast) o);
}
}
}
Ý tưởng tốt. Tôi đã sử dụng nó theo một cách hơi khác. Tôi thích FooBarAdapter để có được các đối tượng với 2 loại khác nhau. Các == có thể được sử dụng để kiểm tra xem đó là cùng một đối tượng (không phải là một). Bằng cách này, họ là một loại kiểm tra thời gian biên dịch. –
Tôi kết hợp mô hình được ủy nhiệm này/đặt tên các lớp bên trong phương thức để "bỏ" một đối tượng mà tôi biết để mở rộng/triển khai một tập hợp các lớp và giao diện có nghĩa là các yêu cầu bị ràng buộc. Xem câu trả lời của Jon: http://stackoverflow.com/a/9514406/910718 –
Và điều này dường như là giới hạn của ngôn ngữ Java vì trong Scala chạy trên cùng một JVM, điều này dễ dàng như o.asInstanceOf [Foo with Bar] –