如何在Java中进行直接替换

时间:2014-10-28 14:31:06

标签: java casting

我想在java.awt.Rectangle类中添加新方法。如果我使用的是Objective-C,那么我可以使用一个类别。或者,如果我使用C ++,我可以创建一个新的类MyRectangle并定义一个构造函数/强制转换对,以便它是一个替代品。

例如,在C ++中

struct java_awt_Rectangle { int x,y,w,h; };    // a dummy for illustration

class MyRectangle                      // a drop in replacement for Rectangle
{
    java_awt_Rectangle rect;

public:
    MyRectangle() {}
    MyRectangle(const java_awt_Rectangle& r) {}

    operator java_awt_Rectangle& ()
    {
        return rect;
    }
};


int main()
{
    java_awt_Rectangle t;
    MyRectangle m;
    m = t;
    t = m;
}

Java中有可能是这样的吗?我尝试用Java创建一个类

public class MyRectangle extends java.awt.Rectangle
{
    public MyRectangle(java.awt.Rectangle r)
    {
        super(r.x, r.y, r.width, r.height);
    }
}

但它不起作用,因为在Java中,构造函数不用于隐式转换(就像在其他语言中一样)。

编辑:在C ++示例中注意我在两个方向上进行了隐式转换。这是我的目标。

1 个答案:

答案 0 :(得分:1)

显然,Java语言的设计者认为隐式转换是危险的或令人困惑的,因此它们不包括任何机制,除了一些原始类型(int - > double等)和向下转换。

向Rectangle类添加一些实用程序的最简单方法是编写自己的静态实用程序,例如

public class MyUtils
{
    public static Point getCenter(Rectangle r) {}
}