2012-10-25 76 views
1

我想學習java關於instanceof運營商按照鏈接: - instanceof在接口中使用instanceof運算符時出錯?

但是,當我試圖運行它們下面的代碼: -

class InstanceofDemo { 
public static void main(String[] args) { 

    Parent obj1 = new Parent(); 
    Parent obj2 = new Child(); 

    System.out.println("obj1 instanceof Parent: " 
     + (obj1 instanceof Parent)); 
    System.out.println("obj1 instanceof Child: " 
     + (obj1 instanceof Child)); 
    System.out.println("obj1 instanceof MyInterface: " 
     + (obj1 instanceof MyInterface)); 
    System.out.println("obj2 instanceof Parent: " 
     + (obj2 instanceof Parent)); 
    System.out.println("obj2 instanceof Child: " 
     + (obj2 instanceof Child)); 
    System.out.println("obj2 instanceof MyInterface: " 
     + (obj2 instanceof MyInterface)); 
} 

}

class Parent {} 
class Child extends Parent implements MyInterface {} 
interface MyInterface {} 

我在編譯時得到以下錯誤:

./Child.java:1: error: cannot find symbol 
class Child extends Parent implements MyInterface{ 
            ^
    symbol: class MyInterface 
InstanceOfDemo.java:9: error: cannot find symbol 
System.out.println("obj1 instanceOf MyInterface" + (obj1 instanceof MyInterface)); 
                    ^
    symbol: class MyInterface 
    location: class InstanceOfDemo 
InstanceOfDemo.java:12: error: cannot find symbol 
System.out.println("obj1 instanceOf MyInterface" + (obj2 instanceof MyInterface)); 
                    ^
    symbol: class MyInterface 
    location: class InstanceOfDemo 
3 errors 

下面的目錄結構,其中SRC代碼放置: -

-rw-rw-r-- 1 ankit ankit 174 Oct 25 15:36 Child.class 
-rw-rw-r-- 1 ankit ankit 31 Oct 25 15:36 Child.java 
-rw-rw-r-- 1 ankit ankit 920 Oct 25 15:41 InstanceOfDemo.class 
-rw-rw-r-- 1 ankit ankit 637 Oct 25 15:41 InstanceOfDemo.java 
-rw-rw-r-- 1 ankit ankit 25 Oct 25 15:20 MyInterface 
-rw-rw-r-- 1 ankit ankit 186 Oct 25 15:36 Parent.class 
-rw-rw-r-- 1 ankit ankit 16 Oct 25 15:18 Parent.java 

注:我刪除了接口實現從Child.javaInstanceOfDemo.java編譯和運行代碼。

編輯1: - 可以我認爲instanceof運算符不能與接口使用,因爲instanceof操作的按甲骨文definiton如下: -

instanceof運算的對象進行比較,以指定的類型。您可以使用它來測試對象是否是類的實例,子類的實例或實現特定接口的類的實例。

+1

'MyInterface'似乎在不同的文件中定義,文件的名字甚至沒有'MyInterface.java'。因此.class文件沒有生成(因此編譯器沒有找到它) –

+0

哇,這似乎需要7分鐘才能回答這個問題。 –

回答

3

你的接口也應該在.java file,所以你需要把MyInterfaceMyInterface.java

-rw-rw-r-- 1 ankit ankit 25 Oct 25 15:20 MyInterface<---Rename it as 
                 MyInterface.java 

在此之後再編譯,一切都應該正常工作

+0

感謝阿米特,重命名MyInterface做了詭計。 :) – Ankit

1

尋找文件清單有問題,你的MyInterface的是缺少.java擴展名。

instanceof可以肯定地用於接口。

如果您想知道「或實現特定接口的類的實例」部分,這意味着myObj instanceof AnInterface測試,如果myObj是實現特定接口的類的實例,即AnInterface。

1

MyInterface似乎被定義在一個不同的文件中,並且該文件的名稱甚至不是MyInterface.java。因此,的.class文件不產生(並且因此沒有被編譯器發現)

解決辦法是將文件MyInterface重命名爲MyInterface.java並編譯它。這將生成一個.class文件,該文件由您的JVM加載。

1

將MyInterface重命名爲MyInterface.java。目錄列表和錯誤消息都認爲它從未編譯到類文件。

1

重命名文件MyInterfaceMyInterface.java那麼你的代碼將運行