[解決済み] ケースクラスのコンパニオンでapplyをオーバーライドする方法
2023-05-31 22:19:11
質問
さて、こんな状況です。 このようなケースクラスを定義したいのです。
case class A(val s: String)
で、このクラスのインスタンスを作るときに、's'の値が常に大文字になるようにオブジェクトを定義したいのですが、こんな感じです。
object A {
def apply(s: String) = new A(s.toUpperCase)
}
しかし、これはScalaがapply(s: String)メソッドが2回定義されていると文句を言うので、うまくいきません。 caseクラスの構文が自動的に定義してくれることは理解していますが、これを実現する他の方法はないのでしょうか? 私はパターンマッチに使いたいので、caseクラスにこだわりたいのです。
どのように解決するのですか?
衝突の原因は、caseクラスが全く同じapply()メソッド(同じシグネチャ)を提供していることです。
まず最初に、requireを使うことを提案したいと思います。
case class A(s: String) {
require(! s.toCharArray.exists( _.isLower ), "Bad string: "+ s)
}
これは、ユーザが s に小文字を含むインスタンスを作成しようとした場合に Exception をスローします。これはケースクラスの良い使い方です。コンストラクタに入力した内容は、パターンマッチ (
match
).
もし、これがあなたの望むものでないなら、私はコンストラクタを
private
にして、ユーザには強制的に
だけ
を強制的に適用させます。
class A private (val s: String) {
}
object A {
def apply(s: String): A = new A(s.toUpperCase)
}
ご覧の通り、Aはもはや
case class
. というのも、quot;case class" という名前から、コンストラクタの (変更されていない) 引数を抽出するために
match
.
関連
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scalaでケースクラスのインスタンスをクローンして、1つのフィールドだけを変更するにはどうすればよいですか?
-
[解決済み] Scalaのパターンマッチングシステムで比較演算子を使う
-
[解決済み] IntelliJ Scala Pluginのcase classのインデントが不合理
-
[解決済み] リスト[Option]からNoneを除外するには?
-
[解決済み] 単純な case class の順序を定義する簡単な慣用的方法
-
[解決済み] scalaでサブディレクトリ内の全ファイルをリストアップするには?
-
[解決済み] scala.concurrent.Promiseのユースケースは何ですか?
-
[解決済み] Scalaの場合 クラス継承
-
[解決済み] Scalaのメソッド宣言で等号を使用するのはいつですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] private[this] vs private
-
[解決済み] リスト[Option]からNoneを除外するには?
-
[解決済み] HDFSではなく、ローカルファイルをsc.textFileで読み込む方法
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] なぜ `private val` と `private final val` は違うのですか?
-
[解決済み] タイプダイナミックの仕組みと使い方を教えてください。
-
[解決済み] Scalaのtraitでvalとdefの使い分けは?
-
[解決済み] ScalaにおけるNull/Nothing/Unitの使用法
-
[解決済み] scala.concurrent.Promiseのユースケースは何ですか?