2010-10-26 42 views
6

Tôi đang cố gắng viết một số mã cho phép tôi thực hiện các phép toán cơ bản trên một cá thể đối tượng "T mở rộng số". Nó cần để có thể xử lý bất kỳ loại số đó là một phân lớp của Number.
Tôi biết một số loại dưới Number.add() phương pháp được tích hợp sẵn và một số thậm chí còn có các phương pháp .multiply(). Tôi cần để có thể nhân hai biến chung của bất kỳ loại có thể. Tôi đã tìm kiếm và tìm kiếm và không thể đưa ra câu trả lời rõ ràng về bất kỳ loại nào.Sử dụng toán tử toán trên các biến chung trong một lớp Java chung

public class Circle<T extends Number> { 

private T center; 
private T radius; 
private T area; 

// constructor and other various mutator methods here.... 

/** 
    The getArea method returns a Circle 
    object's area. 
    @return The product of Pi time Radius squared. 
*/ 
public Number getArea() { 
    return 3.14 * (circle.getRadius()) * (circle.getRadius());  
} 

Mọi trợ giúp sẽ được đánh giá cao. Generics là điều khó khăn nhất mà tôi đã gặp phải trong việc học Java. Tôi không quan tâm đến công việc chân vì tôi học tốt hơn theo cách đó, vì vậy ngay cả một điểm mạnh trong đúng hướng sẽ rất hữu ích.

+0

Có thể bạn đang sử dụng 'Math.PI' thay vì chữ' 3.14'. – ColinD

+0

Điều này sẽ không hoạt động theo cách đó. Khi T mở rộng số, bạn chỉ được phép gọi các phương thức của số lớp. – helpermethod

+0

Mục đích của việc này là gì? – starblue

Trả lời

4

Điều bạn cần làm là sử dụng giá trị kép của Number. Tuy nhiên, điều này có nghĩa là bạn không thể trả lại loại Number.

public double getArea() 
{ 
    return 3.14 * 
      (circle.getRadius().doubleValue()) * 
      (circle.getRadius().doubleValue());  
} 
1

Java không cho phép các nhà khai thác phải được gọi trên lớp (vì vậy không +, -, *, /) bạn phải làm toán như một nguyên thủy (tôi sẽ hiển thị mã ... nhưng jjnguy đánh tôi với nó :-).

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