[英]Scala setters and getters in a Java class
我試圖將Java的Scala / Java混合項目逐步地從Java轉換為Scala。 我有一堂課,上面有很多Scala的設置方法和獲取方法。 這是一個例子:
class inputParams {
var _lakeHdfsPath: String = _
var mandatoryParams = ArrayBuffer[String]()
def lakeHdfsPath = this._lakeHdfsPath
def lakeHdfsPath_=(_lakeHdfsPath: String) = {
mandatoryParams -= "lakeHdfsPath"
this._lakeHdfsPath = _lakeHdfsPath
}
...
在我的Java類中,我試圖設置該對象,但是遇到了困難:
retVal.lakeHdfsPath(cliOpts.getOptionValue("lakeHdfsPath"));
因為在Scala中它需要:
retVal.lakeHdfsPath = cliOpts.getOptionValue("lakeHdfsPath")
但是在Java中:
retVal.lakeHdfsPath() = (cliOpts.getOptionValue("lakeHdfsPath"));
那是行不通的。 我該如何解決?
在Scala中,您應該盡可能遠離可變狀態。 對於bean,您應該將它們實現為case類。 您會自動獲取設置者和獲取者。
case class inputParams (lakeHdfsPath: String) {
def withLakeHdfsPath(newLakeHdfsPath: String): inputParams =
copy(lakeHdfsPath = newLakeHdfsPath)
}
在這里,您僅需要withLakeHdfsPath
方法即可實現Java兼容性,在Scala中可以訪問copy方法。
也許您可以在Scala代碼中更改setter並在def(=)中忽略等號:
def lakePath_(_lakePath: String): Unit = {
mandatoryParams -= "lakePath"
this._lakePath = _lakePath
}
並定義getter的返回值:
var _lakePath: String = _
def lakePath(): String = this._lakePath
然后在Java代碼上嘗試使用getter和setter方法:
public class Main {
public static void main(String[] args) {
//Instantiate the InputParams class.
InputParams returnVal = new InputParams();
//Setting _lakePath.
returnVal.lakePath_("lakePath");
//Getting _lakePath.
String _lakePath = returnVal.lakePath();
//Printing _lakePath to console.
System.out.println(_lakePath);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.