Giả sử tôi có một hệ thống phân cấp lớp như sau:Java Generics, làm thế nào để thực thi hai đối số của một phương thức mở rộng một siêu lớp để có cùng một kiểu?
class Vehicle;
class Car extends Vehicle;
class Plane extends Vehicle;
Tôi có một chức năng mà so sánh hai đối tượng
public <T extends Vehicle> generateDiff(T original, T copy)
Tại thời gian biên dịch, phương pháp nêu trên đảm bảo hai đối tượng là Vehicle
, nhưng nó không thể đảm bảo các loại của hai đối tượng giống nhau.
generateDiff(new Car(), new Car()); //OK
generateDiff(new Plane(), new Plane()); //OK
generateDiff(new Car(), new Plane()); //WRONG
Tôi có thể đạt được điều này tại thời gian biên dịch bằng Generics không?
P.s: hiện tại, tôi đã triển khai nó sẽ ném ngoại lệ nếu Class
của hai đối tượng không giống nhau. Nhưng tôi không hài lòng với điều này.
Xin cảm ơn trước.
+1 cho suy luận kiểu! – UmNyobe