Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:为什么可以';我不能把这个扔到一个物体上吗?_Java_Object_Casting - Fatal编程技术网

Java:为什么可以';我不能把这个扔到一个物体上吗?

Java:为什么可以';我不能把这个扔到一个物体上吗?,java,object,casting,Java,Object,Casting,这很奇怪。。。我认为java中的每个对象都有对象作为祖先 我有一个ClassA扩展了ClassB并实现了Runnable 创建ClassA后,我无法将其强制转换为对象 假设getClassA返回一个ClassA实例 我在做什么 Object obj = getClassA(); 我也试过了 Object obj = (Object) getClassA(); 我得到一个不兼容的类型编译错误:找到类,必需的对象 怎么回事?我以为所有的物体都可以投射到物体上 编辑:我假设这与ClassA实现Ru

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

我有一个
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();这回答了您遇到的错误,而不是提问者的错误。