我正在使用处理库来用Java构建项目。我使用的函数会向我返回PShape类型的对象(我无权访问源代码)。

我需要使该对象的类型为Shape(我设计的扩展PShape的类)。

我该怎么做?

基本上我有:

PShape pShape = loadShape(filename);


其中loadShape是函数,我无权访问源代码。

我想以某种方式做:

class Shape extends PShape {...}


接着

Shape shape = (Shape) loadShape(filename);


但这行不通,一旦loadShape()给我一个PShape,而不是Shape

如何使loadShape返回Shape

谢谢

最佳答案

如果loadShape()返回PShape,则返回PShape。您不能使其返回PShape的子类。

最简单的方法是将Shape复制到新实例中:
例如

Shape myLoadShape(String filename)
{
    return new Shape(loadShape(filename));
    // Assumes you have a `Shape(PShape)` constructor.
}


也许PShape不是子类,但是它包含Shape数据成员。

class Shape
{
    // No one picked up my C++ syntax goof ;-)
    protected PShape pshape;

    // Using a constructor is just one way to do it.
    // A factory pattern may work or even just empty constructor and a
    // load() method.
    public Shape(String filename)
    {
        pshape = loadShape(filename);
        // Add any Shape specific setup
    }


}

09-11 13:11