有一個類(特別是TypedPipe[T] in com.twitter.scalding)只有一個私有的構造函數,我希望給它添加一些方法。它看起來像這樣將方法添加到具有私有構造函數的類中?
class TypedPipe[+T] private (a : Int) {
}
這通常通過定義隱式轉換方法來完成。不過,我需要訪問一個來定義我想要的方法。這在斯卡拉是不可能的嗎?
有一個類(特別是TypedPipe[T] in com.twitter.scalding)只有一個私有的構造函數,我希望給它添加一些方法。它看起來像這樣將方法添加到具有私有構造函數的類中?
class TypedPipe[+T] private (a : Int) {
}
這通常通過定義隱式轉換方法來完成。不過,我需要訪問一個來定義我想要的方法。這在斯卡拉是不可能的嗎?
如果我正確地解釋了你的問題,答案是肯定的,這在Scala中根本不可能。 這與私有構造函數沒有任何關係。如果它是公開的,你將會有完全相同的問題。
class TypedPipe[+T] private (a : Int) {
}
的這裏的一點是,有a
之前沒有val
或var
。 a
不是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
是構造外部訪問,它必須是一個var
或val
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
,並且沒有獲取者
只有TypedPipe
的同伴可能會調用它的構造函數。期。據推測,有一家工廠(在同伴中)可以用來創建實例(否則它有什麼好處?)。從那裏你可以...現在接受的術語是什麼? 「延伸?」 「提高?」或者,正如我們的老前輩所說的那樣,「皮條客」就是這種類型。
「豐富」是現今政治上正確的術語。但我認爲除了EPFL之外,沒有人真的使用過這個,我們都很高興潘潘'! –
我沒有意識到val和var註解是這樣工作的,謝謝。 –