Chuyển đổi loại tham chiếu - 1

"Và bây giờ, một bài học ngắn từ Diego. Ngắn gọn và đi thẳng vào vấn đề. Về chuyển đổi kiểu tham chiếu."

"Hãy bắt đầu với các biến Đối tượng. Bạn có thể gán bất kỳ loại tham chiếu nào cho một biến như vậy ( chuyển đổi mở rộng ). Tuy nhiên, để thực hiện gán theo hướng khác ( chuyển đổi thu hẹp ), bạn phải chỉ ra rõ ràng thao tác truyền: "

Mã số Sự miêu tả
String s = "mom";
Object o = s; // o stores a String
Một chuyển đổi tham chiếu mở rộng điển hình
Object o = "mom"; // o stores a String
String s2 = (String) o;
Một chuyển đổi tham chiếu thu hẹp điển hình
Integer i = 123; // o stores an Integer
Object o = i;
Mở rộng chuyển đổi
Object o = 123; // o stores an Integer
String s2 = (String) o;
Lỗi runtime!
Bạn không thể truyền tham chiếu Số nguyên sang tham chiếu Chuỗi.
Object o = 123; // o stores an Integer
Float s2 = (Float) o;
Lỗi runtime!
Bạn không thể truyền tham chiếu Số nguyên sang tham chiếu Float.
Object o = 123f; // o stores a Float
Float s2 = (Float) o;
Chuyển đổi cùng loại. Một chuyển đổi tham chiếu thu hẹp.

" Chuyển đổi tham chiếu mở rộng hoặc thu hẹp không thay đổi đối tượng theo bất kỳ cách nào. Phần thu hẹp (hoặc mở rộng) đề cập cụ thể đến thực tế là thao tác gán bao gồm (không bao gồm) kiểm tra loại biến và giá trị mới của nó. "

"Đây là ví dụ hiếm hoi mà mọi thứ đều rõ ràng."

"Để tránh các lỗi trong các ví dụ nàychúng ta có một cách để tìm ra loại nào được tham chiếu bởi biến Đối tượng: "

Mã số
int i = 5;
float f = 444.23f;
String s = "17";
Object o = f;                       // o stores a Float

if (o instanceof  Integer)
{
    Integer i2 = (Integer) o;
}
else if (o instanceof  Float)
{
    Float f2 = (Float) o;            // This if block will be executed
}
else if (o instanceof  String)
{
    String s2 = (String) o;
}

"Bạn nên thực hiện việc kiểm tra này trước mỗi lần chuyển đổi mở rộng trừ khi bạn chắc chắn 100% về loại đối tượng."

"Hiểu rồi."