簡體   English   中英

Java:為什么不能將此轉換為對象?

[英]Java: Why can't I cast this to an Object?

這很奇怪...我以為Java中的每個對象都有Object作為祖先。

我有一個ClassA ,它擴展了ClassB並實現了Runnable

創建ClassA我無法將其ClassA轉換為Object

假設getClassA返回一個ClassA實例。

我在做

Object obj = getClassA();

我也試過

Object obj = (Object) getClassA();

我收到一個不兼容的類型編譯錯誤:找到類,必需的對象。

怎么辦? 我認為所有對象都可以轉換為對象。

編輯:我認為這與ClassA實現Runnable有關,但是我不確定,需要解釋。

Edit2:更改getClassA()以返回一個Object允許程序進行編譯。

Edit3:導入包含ClassB的包可解決此問題。 B類是在另一個jar中定義的。 在另一個引用了包含ClassB的jar的jar中定義了ClassA。

您是否偶然在代碼中的某個位置(或它導入的非標准包)中找到了一個名為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());
}

類確實來自Object。 這里還有其他事情。

如果您的代碼確實是:

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

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

它應該工作。 向我們顯示代碼以獲取實際答案。

我在Eclipse中進行了嘗試,並收到了“不必要的強制轉換”警告。 您可能可以對其進行配置,以使其成為錯誤而不是警告,所以我想這就是您所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM