2013-10-30 13 views
1

超級接口定義:如何從超級接口導入內部枚舉類

package mypackage1; 

public Interface MySuperInterface{ 

    public enum MY_APPLICATION_SPECIFIC_ENUM{ 

    APP_CONS1 , 

    APP_CONS2 

    }; 

} 

Sub接口定義:

package mypackage2; 

public Interface MySubInterface extends My SuperInterface{ 

/* sub interface members */ 

} 

Demo類使用子接口:

package mypackage3; 

import mypackage2.MySubInterface.MY_APPLICATION_SPECIFIC_ENUM; 

class MyDemoClass{ 

MY_APPLICATION_SPECIFIC_ENUM myAppEnum = MY_APPLICATION_SPECIFIC_ENUM.APP_CONS1; 


} 

它給人的編譯錯誤:

import requires canonical name for mypackage2.MySubInterface.MY_APPLICATION_SPECIFIC_ENUM 

能否請您就如何通過分界面導入超級接口的枚舉類幫助。

+0

您不需要導入枚舉。只是包含它的界面。嘗試導入mypackage2.MySubInterface; –

+0

@VincentRamdhanie我不認爲這是真的。直接導入枚舉的唯一方法是從其包含的接口。即。 'import mypackage1.MySuperInterface.MY_APPLICATION_SPECIFIC_ENUM;'。導入MySubInterface是不夠的。 – Chill

+0

不。只是導入界面不起作用。它給出了以下錯誤:找不到類MY_APPLICATION_SPECIFIC_ENUM – Peddi

回答

0

你可以做一個靜態導入來訪問一個直接的方式你的枚舉值:

import static mypackage2.MySubInterface.MY_APPLICATION_SPECIFIC_ENUM.*; 

然後,您將能夠在類/接口,使進口直接使用您的枚舉值。

另一種方式來做到這一點是:

import mypackage2; 
... 
// Use of the interface's enum by it's real name 
MySubInterface.MY_APPLICATION_SPECIFIC_ENUM myMethod(Object anyParam); 
+0

import static mypackage2.MySubInterface.MY_APPLICATION_SPECIFIC_ENUM。*;不起作用。給出編譯錯誤。正確的答案是導入靜態mypackage2.MySubInterface。*; (OR)導入靜態mypackage2.MySubInterface.MY_APPLICATION_SPECIFIC_ENUM; – Peddi

+0

或者使用完整的名稱(這是我認爲的最佳選擇),正如我在解決方案中寫的:) – Julien

0

您想爲那裏並不存在,它的枚舉引用一個規範名稱。枚舉在您的接口MySuperInterface中創建。接口的所有變量都是靜態變量和最終變量(即常量)。因爲它們屬於他們聲明的類

靜態變量不能被繼承 要引用枚舉變量,你必須做到以下幾點:

package mypackage3; 
import mypackage.MySuperInterface.MY_APPLICATION_SPECIFIC_ENUM; 

class MyDemoClass{ 

MY_APPLICATION_SPECIFIC_ENUM myAppEnum = MY_APPLICATION_SPECIFIC_ENUM.APP_CONS1; 
} 

這裏是鏈接到它討論了爲什麼變量接口靜態和最終:

Why are interface variables static and final by default?