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

时间:2009-07-16 01:50:35

标签: java object casting

这很奇怪......我认为java中的每个对象都将Object作为祖先。

我有ClassA扩展我的ClassB并实施Runnable

创建ClassA后,我无法将其投放到Object

假设getClassA返回ClassA个实例。

我在做

Object obj = getClassA();

我也试过

Object obj = (Object) getClassA();

我得到一个不兼容的类型编译错误:找到Class,required Object。

这有什么用?我认为所有对象都可以转换为Object。

编辑:我认为它与ClassA实现Runnable这一事实有关,但我不确定并需要解释。

Edit2:更改getClassA()以返回一个Object,允许程序编译。

Edit3:导入包含ClassB的包修复了该问题。 B类是在另一个罐子里定义的。 ClassA在另一个引用包含ClassB的jar的jar中定义。

4 个答案:

答案 0 :(得分:5)

您是否偶然在代码中的某个位置(或导入的非标准软件包)中有一个名为Object的类?

答案 1 :(得分: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());
}

答案 2 :(得分:1)

类确实来自Object。这里还有别的东西。

如果您的代码确实是:

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

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

它应该工作。向我们展示实际答案的代码。

答案 3 :(得分:-4)

我在Eclipse中尝试过此操作并获得了“不必要的强制转换”警告。你可以配置它,这是一个错误而不是一个警告,所以我猜这就是你做的。

相关问题