如何在Java中使用其他包来构建相同类的类型?

bak*_*lap 2 java casting

有两个班

foo.bar.FileUploaderbarbar.foofoo.FileUploader

两者都相同并且延伸 Uploader

在代码中的某处foo.bar.FileUploader使用,并作为一个Uploader类型作为参数提供给我的函数.

现在我需要将它转换回FileUploader不过barbar.foofoo.FileUploader.这给出了一个错误:

错误 - 未处理的错误 java.lang.ClassCastException: foo.bar.FileUploader无法转换为barbar.foofoo.FileUploader

我无法弄清楚出了什么问题,我想这是因为包装不同.在这种情况下:有没有办法仍然使用该类并完成演员表?

Noe*_*l M 7

从技术上讲,他们不是同一个班级.

您将获得ClassCastException,因为JVM根本看不到它们是相同的类型.也许你应该让两个类实现相同的接口并转换为它?或者,首先只有一个班级并摆脱演员阵容?


And*_*s_D 5

对于Java,类不相同.考虑一下

package zoo;
public interface Animal {}

package zoo.london;
public class Lion implements Animal{}

package zoo.newyork;
public class Lion implements Animal{}
Run Code Online (Sandbox Code Playgroud)

即使两个Lion类的实现都是相同的并且它们都实现了一个公共接口,你也不能反之亦然

zoo.london.Lion lion = (zoo.london.Lion) new zoo.newyork.Lion();  // ClassCastException
Run Code Online (Sandbox Code Playgroud)

  • 会在我的世界中给出ClassCastException (4认同)