Java:为什么可以';我不能把这个扔到一个物体上吗?
这很奇怪。。。我认为java中的每个对象都有对象作为祖先 我有一个Java:为什么可以';我不能把这个扔到一个物体上吗?,java,object,casting,Java,Object,Casting,这很奇怪。。。我认为java中的每个对象都有对象作为祖先 我有一个ClassA扩展了ClassB并实现了Runnable 创建ClassA后,我无法将其强制转换为对象 假设getClassA返回一个ClassA实例 我在做什么 Object obj = getClassA(); 我也试过了 Object obj = (Object) getClassA(); 我得到一个不兼容的类型编译错误:找到类,必需的对象 怎么回事?我以为所有的物体都可以投射到物体上 编辑:我假设这与ClassA实现Ru
ClassA
扩展了ClassB
并实现了Runnable
创建ClassA
后,我无法将其强制转换为对象
假设getClassA
返回一个ClassA
实例
我在做什么
Object obj = getClassA();
我也试过了
Object obj = (Object) getClassA();
我得到一个不兼容的类型编译错误:找到类,必需的对象
怎么回事?我以为所有的物体都可以投射到物体上
编辑:我假设这与ClassA实现Runnable有关,但我不确定,需要解释
Edit2:更改getClassA()以返回对象允许程序编译
Edit3:导入包含ClassB的包修复了该问题。类B是在另一个jar中定义的。ClassA是在另一个jar中定义的,该jar引用了包含ClassB的jar。类确实是从对象派生的。这里还有别的事情
如果您认为代码实际上是:
//...Code
Object obj = MyObject.getClassA();
//More Code...
class MyObject{
static Class getClassA(){...}
}
它应该会起作用。向我们展示实际答案的代码。我在Eclipse中尝试了这一点,得到了一个“不必要的强制转换”警告。您可能可以将其配置为错误而不是警告,因此我猜您就是这样做的。您的代码(或它导入的非标准包)中是否有一个名为Object
的类?您是如何编译java文件的。您能提供一些关于getClassA()的更多信息吗。此方法的返回类型是什么
类型转换是不必要的,因为java中的所有对象都是Object类型
如果您使用的是像eclipse这样的IDE,那么可以在分配对象obj=getClassA()的行上放置一个断点;并检查getClassA()返回的值
否则,您可以在将值指定给obj之前尝试放置instanceof条件
if(getClassA() instanceof Object){
Object obj = getClassA();
}else{
System.out.println("getClassA() is not retuning an object: "+ getClassA());
}
显示getClassA()实现和签名。请显示getClassA()
的主体(而不仅仅是签名)。错误似乎在主体内部,而不是在您调用它的地方;公共类ClassA扩展了另一个实现Runnable的类;很抱歉,我不能发布实现,那么就没有什么可以做的了。在任何情况下,您发布的行都无法生成这样的错误消息。因此,错误消息来自另一行。如果您不能发布,那么就无法判断错误原因。顺便问一下,您确定错误消息是“找到类,必需对象”,而不是例如“找到类a,必需对象”?公共静态类a getClassA(字符串a,字符串b);公共类ClassA扩展了另一个实现Runnable的类;抱歉,我无法发布实现如果是这样,请尝试转换为-java.lang.Object obj=getClassA();这回答了您遇到的错误,而不是提问者的错误。