Truyền rõ ràng là yêu cầu và sẽ thành công.
Lý do tại sao nó là bắt buộc bởi vì nó không luôn luôn thành công: biến được khai báo là A x
có thể tham chiếu đến các trường hợp không phải là instanceof B
.
// Type mismatch: cannot convert from Object to String
Object o = "Ha!";
String s = o; // DOESN'T COMPILE
// Compiles fine, cast succeeds at run-time
Object o = "Ha!";
String s = (String) o;
// Compiles fine, throws ClassCastException at run-time
Object o = Boolean.FALSE;
String s = (String) o;
hay không một dàn diễn viên được yêu cầu được xác định chỉ bởi các loại tuyên bố của các biến có liên quan, KHÔNG bởi các loại của các đối tượng mà họ đang đề cập đến tại thời gian chạy. Điều này đúng ngay cả khi các tham chiếu có thể được giải quyết tại thời gian biên dịch.
final Object o = "Ha!";
String s = o; // STILL doesn't compile!!!
Ở đây, mặc dù final
biến o
sẽ luôn luôn đề cập đến một instanceof String
, gõ tuyên bố của nó vẫn còn là Object
, và do đó một rõ ràng (String)
cast là vẫn cần thiết để biên dịch.
Cảm ơn một nhóm. Tôi hoàn toàn hiểu ngay bây giờ. – XpdX
@XpdX: thì bạn nên chấp nhận điều này làm câu trả lời đúng. –