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

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

그래서이 ListBuffer를 목록으로 변환하면 형식이 유지되지 않습니다.List ListBuffer [Any]는 요소 유형을 유지할 수 있습니까?

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

이 방법이 있습니까?

+8

유형은'모두 '입니다. 어떤 유형을 유지 하시겠습니까? – ashawley

+5

예, 유형이 유지됩니다. 여러분의 예제가 보여 주듯이,'ListBuffer [X]'로 시작해서'.toList'를 적용하면'List [X]'를 얻을 수 있습니다. 전환시 형식 정보가 손실되지 않습니다. – jwvh

답변

2

buffer 당신이 ListBuffer[Any]

스칼라 "기본"컬렉션에서 List[Any]를 얻을 수 의미 당신이 목록에 버퍼 변환 할 때, 동일한 "내부 유형이"유지 new ListBuffer[Any]()

당신의 선언에서 ListBuffer[Any]입니다 관련없는 유형 (String, Int, Option [X])의 콜렉션을 지원하지 않으면 중요한 유형 정보를 잃게됩니다.

변수가 유한 길이 인 튜플 2 요소의 dif 예를 들어 3 요소가 포함 된 튜플 유형)

또 다른 솔루션은 Shapeless HList를 사용하는 것입니다. This post은 HList가 무엇인지 설명하는 데 매우 유용합니다. 왜 하나를 원하며 사용 방법은 무엇입니까?

관련 문제