2014-09-01 28 views
0

有一種類型聲明的特徵。我無法弄清楚實際的SomeType類型是什麼?下面是代碼:如何找出scala中的實際類型?

package someModel { 
    trait SomeTrait extends Serializable { 
      type SomeType 
      def id: SomeType 
     }  
} 

重要事項

  • 沒有在someModel文件中沒有進口。
  • 序列化是scala.Serializable
  • type SomeType出現在SomeTrait只有。不在文件中的某處。
+0

你有可能改變/裏面添加特質'SomeTrait'不便? – DaunnC 2014-09-01 06:10:00

+0

不要完全理解你的意思,但是這個特徵應該像'class BlaBla with SomeTrait'一樣使用。 – Cherry 2014-09-01 06:11:36

回答

2

如果我正確理解你的問題,SomeType是不是一個實際的類型(還),它是一個抽象類型成員,抽象的,因爲混合類將不得不爲它提供一個實現:

trait SomeTrait extends Serializable { 
    type SomeType 
    def id: SomeType 
} 

class SomeClass extends SomeTrait { 
    type SomeType = Int 

    def id: SomeType = 1 
} 

class SomeOtherClass extends SomeTrait { 
    type SomeType = Long 

    def id: SomeType = 2L 
} 

對於仿製藥和類成員之間的區別有this great SO

+0

@ DanielC.Sobral感謝您的注意。 – 2014-09-01 07:44:58

1

我真的不明白什麼是「實際類型」在你問題的意思。

  1. 如果你想知道什麼SomeType將是,這是不可能的,因爲它尚未宣佈。

  2. 如果你問如何在編譯時參考一些SomeTrait實例SomeType,然後只需調用foo.SomeType其中fooSomeTrait

  3. 如果需要在運行時間期間類型信息已被刪除,您必須讓實例在某些內容中攜帶它。 Here sees how to do it.

我希望我有你的想法:)

相關問題