2012-07-16 44 views
2

對於一些無關緊要的原因,我需要一個類:AS3:內部類和接口的編譯器錯誤?

  1. 繼承(直接與否)從MovieClip
  2. 它實現了一個特定的接口(讓我們假設這個接口是空的,因爲它不會改變任何問題)。
  3. 及其。作爲文件聲明內部類。

下面的代碼求和這件事:

package { 
    import flash.display.MovieClip; 
    public class MyClass extends MovieClip implements EmptyInterface { } 
} 

class MyInnerClass { } 

上面代碼的問題是,它不會總是編譯。只要我使用MyClass作爲鏈接對於我的庫項目之一,編譯器抱怨MyClass不是MovieClip的子類。另一方面,如果我手動實例化並將其添加到舞臺,一切都會很好。

看起來接口和內部類在某種特定情況下以某種方式相互排斥。事實上,如果我刪除了內部類我沒有這樣的錯誤了:

package { 
    import flash.display.MovieClip; 
    public class MyClass extends MovieClip implements EmptyInterface { } 
} 

同樣的事情時我刪除實現的接口,但保持內部類:

package { 
    import flash.display.MovieClip; 
    public class MyClass extends MovieClip { } 
} 

class MyInnerClass { } 

請注意,我只是完成在Flash CS5中對此進行了測試。

+0

我的猜測是,EmptyInterface阻止一些影片剪輯功能的該鏈接時,編譯器測試對於。 – 2012-07-16 14:23:29

+0

內部類可能會導致問題,因爲它在默認範圍內,而在頂層包中。您是否嘗試過使用完全限定的軟件包名稱? – weltraumpirat 2012-07-16 16:10:12

+0

@The_ManMan不知道你說了什麼,但是,如果接口是問題的原因,當我刪除內部類聲明並保留接口時,代碼爲什麼工作? – 2012-07-17 07:29:51

回答

1

我說這是編譯器的一個bug。

我測試過並發現私人課程必須擴展任何不是Object的課程。它可以實現任何接口,而不是擴展類。

即使我把類放到更深的包中,這也是一樣的。

我已經用Flash CS6測試過了。

+0

+1我也測試過它並得出了相同的結論。雖然內部類不是「私人」,但實際上,類可以永遠不會是私有的。省略可見性關鍵字默認爲'internal'。好東西:因此,類可以移動到一個單獨的文件,而不會影響生成的二進制文件 - 即使不擴展Object也適用於編譯器。 – weltraumpirat 2012-07-17 15:41:27

+0

我也測試過它,它確實有效。只要內部類擴展(或實現)除「Object」以外的其他任何內容,編譯器就不會抱怨** other類不是「MovieClip」的子類。編譯器錯誤是。 – 2012-07-18 07:59:07

0

如果我正在讀你的話,你想要一個公開課來擴展一個內部課程嗎? - 只要你聲明自己的內部類爲自己的打包文件,就沒有任何東西阻止你這樣做。

根據文檔:

[dynamic] [public | internal] [final] class className [ extends superClass ] [ implements interfaceName[, interfaceName... ] ] { 
    // class definition here 
} 



如果它是給你悲傷的界面,你在一個單獨的文件中聲明的一樣好 - 你會導入?正如評論中所隱含的那樣,命名空間範圍的確定非常重要,這樣編譯器就可以理解升級的優先級是什麼。

如:

package my.example { 
    public interface EmptyInterface 
    { 
    } 
} 

這樣:

package { 
    import flash.display.MovieClip; 
    import my.example.EmptyInterface; 
    public class MyClass extends MovieClip implements EmptyInterface { } 
} 
0

如果這不能解決它我有另一個想法,但首先嚐試。
點擊文件
點擊發布上的設置按鈕設置
點擊
取消選中自動聲明舞臺實例
單擊確定

+0

這不起作用。我試圖改變其他AS選項,但這些改變都沒有影響到這個問題。 – 2012-07-18 07:51:02

+0

@antmarot請發佈您的EmptyInterface類 – 2012-07-18 12:59:37