这很奇怪......我认为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中定义。
答案 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中尝试过此操作并获得了“不必要的强制转换”警告。你可以配置它,这是一个错误而不是一个警告,所以我猜这就是你做的。