簡體   English   中英

Scala / IntelliJ:案例對象X與案例類X與案例類X()

[英]Scala/IntelliJ: case object X vs case class X vs case class X()

Scala中有案例類:

case class X(one: One, two: two)

有些案例對象只有一個實例(這很有意義):

case object X

當我聲明不帶參數的case類時,IntelliJ做正確的事並棄用警告我使其成為case對象:

case class X // deprecated stuff

但是它並沒有警告我

case class X()

這使我想知道case class Xcase class X()之間是否有區別?

我不知道您使用的是什么Scala版本,但是在2.11中,這不僅被棄用,而且確實是一個錯誤:

 Error:(34, 17) case classes without a parameter list are not allowed;
 use either case objects or case classes with an explicit `()' 
 as a parameter list.
   case class Foo
                 ^

簡而言之,您無法針對無參數列表案例類進行模式匹配,因此它們沒有用。

case class Foo()

def test(in: Any) = in match {
  case Foo() => "foo"
  case _     => "other"
}

聲明案例對象時,只會創建一個實例。 但是,無參數案例類可以有多個不同的實例。 為什么您會想要那是另一回事。

原則上, case class Foocase class Foo()之間沒有區別。 我認為前者已被棄用,因為不經意間濫用它很容易。 這篇文章很好地說明了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM