[英]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.