我无法理解Option[T]Scala中的课程要点.我的意思是,我不能看到任何advanages None了null.
例如,考虑代码:
object Main{
class Person(name: String, var age: int){
def display = println(name+" "+age)
}
def getPerson1: Person = {
// returns a Person instance or null
}
def getPerson2: Option[Person] = {
// returns either Some[Person] or None
}
def main(argv: Array[String]): Unit = {
val p = getPerson1
if (p!=null) p.display
getPerson2 match{
case Some(person) => person.display
case None => /* Do nothing */
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设,该方法getPerson1返回null …
我已经阅读了很多有关Optional应该使用的案例的信息。
我读过的很多页面都说Optional不应将其用于私有实例变量,而应由getter返回。
我本以为将私有实例变量作为可选变量仍然有用。如果有人查看我的代码,他们可以看到值可以为空,而不必检查文档以查看是否可以返回null。
在Scala中,从不使用null,只有在与Java互操作的情况下才使用null。如果值可以为null,建议始终使用可选值。这种方法对我来说更有意义。
这是提及它的页面:
https://blog.joda.org/2015/08/java-se-8-optional-pragmatic-approach.html
这是示例代码。
private final String addressLine; // never null
private final String city; // never null
private final String postcode; // optional, thus may be null
// normal getters
public String getAddressLine() { return addressLine; }
public String getCity() { return city; }
// special getter for optional field
public Optional<String> getPostcode() {
return Optional.ofNullable(postcode);
}
Run Code Online (Sandbox Code Playgroud)
我可以看到的唯一好处是,如果您要序列化对象,则现在可以实现,因为它不会在变量中存储可选内容。
缺点是,在检查getter的返回类型之前,您不知道邮政编码可以为null。如果您不熟悉该代码,则可能会错过此添加操作,从而扩展了类,从而导致空指针异常。
这是一个有关Scala的问题Option。
为什么Java和Scala在使用可选方式方面有区别?
如果正整数在从左到右和从右到左读取时在十进制系统中的表示相同,则称为回文.对于给定的正整数K不超过1000000个数字,写入大于K的最小回文值输出.
我可以定义一个isPalindrome方法如下:
def isPalindrome(someNumber:String):Boolean = someNumber.reverse.mkString == someNumber
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当整数满足isPalindrome方法时,如何从初始给定数字循环并中断并返回第一个回文?另外,是否有更好(有效)的方法来编写isPalindrome方法?
在这里获得一些指导会很棒