Java Class Cast Exception java.awt.geom.Path2D.Double



我在尝试实现仿射变换时遇到了这个类转换异常。

调用仿射变换:

public Shape moveToAndRotate(double x, double y, double theta)
{
    double cx = getBounds2D().getCenterX();
    double cy = getBounds2D().getCenterY();
    at.translate(cx, cy);
    at.translate(x, y);
    at.rotate(Math.toRadians(theta));
    at.translate(-cx, -cy);
    return at.createTransformedShape(yingYang);
}

它驻留在自定义形状类 (应阳) 中。

public class YingYang implements Shape
{
    private Area yingYang = new Area();
    private AffineTransform at = new AffineTransform();
    ...
}

每当我进行调用时,当我尝试从绘图面板或类中将其投射回 YingYang 时,我会收到类转换异常(如果我将返回类型更改为 Yingang。

我像这样打电话:

YingYang newShape = (YingYang) shape.moveToAndRotate(newLoc1.x, newLoc1.y, theta);

这是错误:

java.lang.ClassCastException: java.awt.geom.Path2D$Double 不能强制转换为 Animation.YingYang

自从莹阳实施形状以来,任何想法都会认为我根本不应该铸造这个。我错过了一个关键概念吗?

您会收到类强制转换异常,因为您只能沿继承树向上移动。意思是阴阳是一个形状,但形状不一定是阴阳。createTransformedShape 返回一个 Path2D,它是一个 Shape。但那个形状不是阴阳。

你可以将变量阴阳=新Area()保留在你的阴阳类中,或者让你的阴阳扩展面积。

所以阴阳>有一个区域。这将是阴阳->是一个区域

如果你真的需要保持扩展继承打开,你可以实现一个形状并实现所有方法去阴阳变量。

然后创建一个如下所示的构造函数

private class YinYang extends Area {
    public YinYang(Shape shape) {
        super(shape);
    }
}
public Shape moveToAndRotate(double x, double y, double theta)
{
    double cx = getBounds2D().getCenterX();
    double cy = getBounds2D().getCenterY();
    at.translate(cx, cy);
    at.translate(x, y);
    at.rotate(Math.toRadians(theta));
    at.translate(-cx, -cy);
    return at.createTransformedShape(yingYang);
}
YingYang shape = new YingYang(shape.moveToAndRotate(newLoc1.x, newLoc1.y, theta));

相关内容

  • 没有找到相关文章

最新更新