2013-01-23 35 views

回答

3

如果我正確地解釋了你的問題,答案是肯定的,這在Scala中根本不可能。 這與私有構造函數沒有任何關係。如果它是公開的,你將會有完全相同的問題。

class TypedPipe[+T] private (a : Int) { 

} 

的這裏的一點是,有a之前沒有valvara不是TypedType的屬性,但只有一個參數給它的構造,即無屬性創建保存物體

這等同於Java代碼中的值:

public class MyClass{ 
    private final String value; 
    public MyClass(int a){ 
     System.out.println("I was initialized with " + a); 
     this.value="b"; 
    } 
} 

你可以用REPL輕鬆地檢查出它。如果你想a是構造外部訪問,它必須是一個varval

class TypedPipe[+T] private (a : Int) { 
  println(a) 
} 

class TypedPipe1[+T] private (val a : Int) { 
  println(a) 
} 

我在REPL javap的反彙編器的大風扇:

scala> :javap -p TypedPipe 

scala> Compiled from "TypedType.scala" 
public class TypedPipe extends java.lang.Object implements scala.ScalaObject{ 
    private TypedPipe(int); 
} 


scala> :javap -p TypedPipe1 

scala> Compiled from "TypedType.scala" 
public class TypedPipe1 extends java.lang.Object implements scala.ScalaObject{ 
    private final int a; 
    public int a(); 
    private TypedPipe1(int); 
} 

,你可以在第一個版本中沒有成員財產來保存價值a,並且沒有獲取者

+0

我沒有意識到val和var註解是這樣工作的,謝謝。 –

2

只有TypedPipe的同伴可能會調用它的構造函數。期。據推測,有一家工廠(在同伴中)可以用來創建實例(否則它有什麼好處?)。從那裏你可以...現在接受的術語是什麼? 「延伸?」 「提高?」或者,正如我們的老前輩所說的那樣,「皮條客」就是這種類型。

+2

「豐富」是現今政治上正確的術語。但我認爲除了EPFL之外,沒有人真的使用過這個,我們都很高興潘潘'! –

相關問題