2012-01-14 38 views
7

Tôi muốn xác định loại truyền từ kiểu tùy ý sang kiểu dữ liệu nguyên thủy trong Java. Có thể định nghĩa một diễn viên từ một loại tùy ý sang một loại tùy ý khác không?Xác định kiểu truyền trong Java

public class Foo{ 
    //methods, constructor etc for this class 
    ... 
    //make it possible to cast an object of type Foo to an integer 
} 
//example of how an object of type foo would be cast to an integer 
public class Bar(){ 
    public static void main(String[] args){ 
     Foo foo1 = new Foo(); 
     int int1 = (int)foo1; 
     System.out.println(int1+""); 
    } 
} 
+0

Khá chắc chắn điều này là không thể, nhưng có lẽ ai đó có thể sửa tôi về vấn đề này. – AHungerArtist

+0

Không thể có cấu trúc như diễn viên, miễn là các Lớp có cùng biến? –

+0

@LeeScott không, Java sẽ ném một 'ClassCastException' – Dave

Trả lời

9

Bạn không thể cast nó, nhưng bạn có thể cung cấp một chức năng chuyển đổi:

public class Foo{ 
    //methods, constructor etc for this class 
    ... 
    public int toInt(){ 
     //convert to an int. 
    }  
} 

Bar sau đó trở thành:

public class Bar(){ 
    public static void main(String[] args){ 
     Foo foo1 = new Foo(); 
     int int1 = foo1.toInt(); 
     System.out.println(int1+""); 
    } 
} 
1

lớp Foo phải mở rộng Số. Tại sao bạn muốn làm điều đó? tại sao không chỉ truy cập vào một biến int bên trong của foo.

3

Không thể chuyển đổi từ loại lớp (ví dụ: Foo) thành loại nguyên thủy trực tiếp. Thay vào đó, bạn nên định nghĩa các phương thức (ví dụ: int asInteger()) trả về giá trị của đối tượng Foo dưới dạng số nguyên.

3

Không, không phải. Nó sẽ không thực sự có ý nghĩa: làm thế nào có thể một Foo trở thành một int?

Thay xác định một chuỗi các phương pháp thích hợp, chẳng hạn như:

public int toInt() { return 42; } 

Typecasting giữa các kiểu dữ liệu và các loại Java, chẳng hạn như giữa intInteger, thậm chí còn không ban một phần của Java.

Các vấn đề liên quan