2017-04-17 11 views
-2
var buffer = new ListBuffer[Any]() 

buffer += "Some Text" 
buffer += 10 
buffer += Some("text") 

したがって、このListBufferをリストに変換すると、そのタイプは保持されません。Can ListBuffer [Any]は要素の型を保持しますか?

scala> buffer.toList 
res5: List[Any] = List(123, Some(abc)) 

これを行う方法はありますか?

+8

タイプは 'Any'です。どんなタイプを保持したいですか? – ashawley

+5

はい、タイプは保持されます。あなたの例が示すように、 'ListBuffer [X]'で始まり、 '.toList'をそれに適用すると' List [X] 'が得られます。移行時にタイプ情報が失われることはありません。 – jwvh

答えて

2

bufferを使用すると、リストにバッファ変換すると、同じ「インナータイプは、」あなたはList[Any]

ListBuffer[Any]からScalaの「ネイティブ」のコレクションを取得する意味、維持されているあなたの宣言から ListBuffer[Any] new ListBuffer[Any]()

です関連しない型(String、Int、Option [X])のコレクションをサポートしていない場合、重要な型情報を失うことになります。

変数は有限の長さのタプル2つの要素のdifたとえば、3要素のタプルのタイプ)

もう1つの解決策は、Shapeless HListを使用することです。 This postはHListが何であるかを説明するのに非常に優れています。理由と使い方は何ですか?

関連する問題