Java: 为什么我不能将此转换为Object?

3
这真是奇怪...我认为Java中的每个对象都有Object作为祖先。
我有一个ClassA,它扩展了我的ClassB并实现了Runnable接口。
创建ClassA后,我无法将其转换为Object。
假设getClassA返回一个ClassA实例。
我正在执行:
Object obj = getClassA();

我也尝试过

Object obj = (Object) getClassA();

我遇到了不兼容类型的编译错误:找到了Class,需要Object。

这是怎么回事?我以为所有对象都可以强制转换成Object。

编辑:我认为这可能与ClassA实现了Runnable有关,但我不确定,需要解释一下。

编辑2:将getClassA()改为返回一个Object可以使程序编译通过。

编辑3:导入包含ClassB的包可以解决问题。Class B在另一个jar中定义。ClassA在另一个引用了包含ClassB的jar的包中定义。


请展示getClassA()的主体内容(不只是函数声明)。似乎错误出现在函数主体内部,而不是调用它的地方。 - Pavel Minaev
1
那么就没有太多可以做的了。你发布的那一行显然不可能在任何情况下产生这样的错误信息。因此,错误信息来自另一行代码。如果你无法发布那一行代码,那么就无法知道它为什么出错。 - Pavel Minaev
顺便问一下,你确定错误信息是“找到了Class,需要Object”,而不是例如“找到了ClassA,需要Object”吗? - Pavel Minaev
你解决了这个问题吗?我在别处也遇到了这个问题。可能是IDE的问题。 - Jus12
在我的情况下,确实是Netbeans出了问题。从命令行编译代码没有问题。(当然,我指的是另一段代码) - Jus12
显示剩余2条评论
4个回答

6

您的代码中是否偶然有一个名为 Object 的类(或者它导入了非标准包)?


如果可以的话,请尝试将其转换为 - java.lang.Object obj = getClassA()。 - Nate

2

您是如何编译Java文件的?能否提供有关getClassA()方法的更多信息?此方法的返回类型是什么?

类型转换是不必要的,因为Java中的所有对象都是Object类型。

如果您使用像Eclipse这样的IDE,可以在分配Object obj = getClassA();的行上设置断点,并检查getClassA()返回的值。

否则,您可以在将值分配给obj之前尝试使用instanceof条件。

if(getClassA() instanceof Object){
    Object obj = getClassA();
}else{
    System.out.println("getClassA() is not retuning an object: "+ getClassA());
}

1

这个类确实是从Object继承而来的。但这里还有其他问题。

如果你的代码真的是这样的:

//...Code
Object obj = MyObject.getClassA();
//More Code...

class MyObject{
  static Class getClassA(){...}
}

应该可以工作。请展示实际答案的代码。


public static ClassA getClassA(String a, String b);public class ClassA extends AnotherClass implements Runnable; - jbu

-4

我在Eclipse中尝试过这个,得到了一个“不必要的转换”警告。你可能可以将其配置为错误而不是警告,所以我猜这就是你所做的。


这解决了你遇到的错误,而不是提问者所遇到的错误。 - Clay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接