Java类强制转换异常Java.awt.geom.Path2D.Double
我在尝试实现仿射转换时遇到了这个类强制转换异常 调用AffineTransform: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);
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转换为盈阳。根据APIcreateTransformedShape(Shape pSrc)
返回形状而不是路径2D。Double@jbolt:Shape只是接口,Path2D是具体的实现。createTransformedShape可以选择任何适合转换的具体实现。实现可以是任何形状,您实际上不需要知道实现…除非您尝试将其强制转换为还有一些问题。请看ns47731的答案,我认为它很好地总结了情况。我将转到一个新问题,因为我现在有一个不同的问题,而且演员问题似乎已经解决。现在我遇到了一个形状返回零边界的问题。[(问题在这里)。