2011-09-21 6 views
9

Tôi cố gắng tìm thấy, nhưng tất cả dường như mơ hồ. Tôi cần chuyển đổi Object o thành Double. Cách chính xác đầu tiên có được chuyển thành Chuỗi không? Cảm ơn.Cách chính xác đối tượng chuyển đổi/đối tượng Java thành Double

+2

loại đặc biệt của đối tượng của bạn là gì? Nó thực sự là một đôi, hoặc cái gì khác? – nos

+0

Object là gì? Có phải là một lớp không xác định hoặc một lớp Đôi đã được nhập vào một đối tượng. – Rontologist

+0

"Tôi cố gắng tìm thấy, nhưng tất cả dường như mơ hồ." - câu hỏi của bạn quá mơ hồ để có được câu trả lời rõ ràng. xin hãy giải thích. 'Object o' là gì và ý định là gì? – Saket

Trả lời

8

Bạn không thể truyền một đối tượng đến Double nếu đối tượng không phải là Double.

Khám phá API.

đặc biệt lưu ý

valueOf(double d);

valueOf(String s);

Những phương pháp cung cấp cho bạn một cách để nhận một trường hợp Double từ một String hoặc hai nguyên thủy. (Ngoài ra không phải là các nhà xây dựng; đọc tài liệu để xem cách họ làm việc) Đối tượng bạn đang cố gắng chuyển đổi một cách tự nhiên phải cung cấp cho bạn thứ gì đó có thể được chuyển đổi thành gấp đôi.

Cuối cùng, hãy nhớ rằng Double trường hợp không thay đổi được - khi được tạo, bạn không thể thay đổi chúng.

25
new Double(object.toString()); 

Nhưng có vẻ lạ đối với tôi khi bạn chuyển từ Object sang Double. Bạn nên có ý tưởng tốt hơn về loại đối tượng bạn đang bắt đầu trước khi thử chuyển đổi. Bạn có thể có một chút vấn đề về chất lượng mã ở đó.

Lưu ý rằng đây là chuyển đổi chứ không phải truyền.

+2

Nếu đối tượng là null, nó sẽ ném nullpointerexception. –

+0

Double.valueOf (object.toString()) sử dụng ít bộ nhớ – Loolooii

6

Bạn có thể sử dụng toán tử instanceof để kiểm tra xem nó có phải là gấp đôi trước khi truyền hay không. Sau đó bạn có thể đúc nó thành một đôi. Ngoài ra, bạn có thể kiểm tra nó so với các loại đã biết khác (ví dụ: Số nguyên) và sau đó ép chúng thành hai lần theo cách thủ công nếu muốn.

Double d = null; 
    if (obj instanceof Double) { 
     d = (Double) obj; 
    } 
1

Trong Java phiên bản trước 1,7 bạn không thể cast đối tượng để loại nguyên thủy

double d = (double) obj; 

Bạn có thể đúc một đối tượng đến một đúp tốt

Double d = (Double) obj; 

Hãy coi chừng, nó có thể ném một ClassCastException nếu đối tượng của bạn không phải là Double

2



Cũng đáng nói đến - nếu bạn bị buộc phải sử dụng phiên bản Java cũ hơn 1.5 và bạn đang cố gắng sử dụng Bộ sưu tập, bạn sẽ không thể tham số hóa bộ sưu tập với loại như Double.

Bạn sẽ phải tự "hộp" vào lớp Double khi thêm mặt hàng mới, và "Unbox" để nguyên thủy double bằng cách phân tích và đúc, làm một cái gì đó như thế này:

LinkedList lameOldList = new LinkedList(); 
lameOldList.add(new Double(1.2)); 
lameOldList.add(new Double(3.4)); 
lameOldList.add(new Double(5.6)); 

double total = 0.0; 
for (int i = 0, len = lameOldList.size(); i < len; i++) { 
    total += Double.valueOf((Double)lameOldList.get(i)); 
} 


Danh sách trường học cũ sẽ chỉ chứa loại Object và do đó phải được truyền tới Double.

Ngoài ra, bạn sẽ không thể lặp qua danh sách với tăng cường cho vòng lặp trong các phiên bản Java ban đầu - chỉ với vòng lặp for.

+1

Bạn có nghĩa là "trước 1.5" không? Đó là nơi mà generics và autoboxing được giới thiệu. Hay bạn có nghĩa là cái gì khác? –

+0

Rất tiếc, bạn chính xác @AlexeyRomanov, tôi đã chỉnh sửa câu trả lời của mình để phản ánh điều này. –

4

Nếu đối tượng của bạn đại diện cho một số, ví dụ như số nguyên, bạn có thể truyền số đó thành một số rồi gọi phương thức doubleValue().

Double asDouble(Object o) { 
    Double val = null; 
    if (o instanceof Number) { 
     val = ((Number) o).doubleValue(); 
    } 
    return val; 
} 
0

thử tất cả các phương pháp này để chuyển đổi ->

obj2Double

public static void main(String[] args) { 

    Object myObj = 10.101; 
    System.out.println("Cast to Double: "+((Double)myObj)+10.99); //concates 

    Double d1 = new Double(myObj.toString()); 
    System.out.println("new Object String - Cast to Double: "+(d1+10.99)); //works 

    double d3 = (double) myObj; 
    System.out.println("new Object - Cast to Double: "+(d3+10.99));  //works 

    double d4 = Double.valueOf((Double)myObj); 
    System.out.println("Double.valueOf(): "+(d4+10.99));  //works 

    double d5 = ((Number) myObj).doubleValue(); 
    System.out.println("Cast to Number and call doubleValue(): "+(d5+10.99));  //works 

    double d2= Double.parseDouble((String) myObj); 
    System.out.println("Cast to String to cast to Double: "+(d2+10));  //works 
}