Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java类强制转换异常Java.awt.geom.Path2D.Double_Java_Shape_Classcastexception_Affinetransform_Path 2d - Fatal编程技术网

Java类强制转换异常Java.awt.geom.Path2D.Double

Java类强制转换异常Java.awt.geom.Path2D.Double,java,shape,classcastexception,affinetransform,path-2d,Java,Shape,Classcastexception,Affinetransform,Path 2d,我在尝试实现仿射转换时遇到了这个类强制转换异常 调用AffineTransform: 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);

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

调用AffineTransform:

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(如果我将返回类型更改为YingYang)时,我都会收到一个类转换异常

public class YingYang implements Shape
{
    private Area yingYang = new Area();
    private AffineTransform at = new AffineTransform();
    ...
}
我这样打电话:

YingYang newShape = (YingYang) shape.moveToAndRotate(newLoc1.x, newLoc1.y, theta);
这就是错误:

java.lang.ClassCastException:java.awt.geom.Path2D$Double无法转换为Animation.YingYang


自从盈阳实现了shape之后,任何想法都会认为我根本不应该强制转换这个。我是否缺少一个关键概念?

您将获得一个类强制转换异常,因为您只能进入继承树。这意味着盈阳是一个形状,但形状不一定是盈阳。createTransformedShape将返回一个路径2D,它是一个形状。但那个形状不是阴阳

您可以将变量yinYang=new Area();保留在yinYang类中,也可以使yinYang扩展该区域

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

如果您真的需要打开extends继承,那么您可以实现一个shape并实现所有转到yinYang变量的方法

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

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));

您遗漏了非常重要的部分,例如
at
的定义和变量
shape
。您需要显示足够的代码,以便我们看到您在做什么。盈阳实现了shape…但是
createTransformedShape
返回一个路径2D——也就是说,它不再是盈阳实例,而是一个全新的shape对象unr这就是为什么你不能将其转换为盈阳的原因。请注意错误是:你显然试图将a转换为盈阳,而不是将Path2D转换为盈阳。根据API
createTransformedShape(Shape pSrc)
返回形状而不是路径2D。Double@jbolt:Shape只是接口,Path2D是具体的实现。createTransformedShape可以选择任何适合转换的具体实现。实现可以是任何形状,您实际上不需要知道实现…除非您尝试将其强制转换为还有一些问题。请看ns47731的答案,我认为它很好地总结了情况。我将转到一个新问题,因为我现在有一个不同的问题,而且演员问题似乎已经解决。现在我遇到了一个形状返回零边界的问题。[(问题在这里)。