이 유형이 무엇인지에 대해 신경 쓰지 않으면 [_, _]을 사용하여 매개 변수화 할 수 있습니다. 예를 들면 좀 더 명확 그것의 본질에 대한, 밑줄가 "실존 적 형태"로 알려져 있으려면
val thing = new SomeClass[_, _]()
또는
def thingDoer(sc: SomeClass[_, _]) { /* Stuff */ }
같은 것들을 수 있습니다, 그것은 기본적으로 원시 형의 등가이다 Java에서 사용할 수 있으며 Java의 와일드 카드 유형과 유사하게 작동 할 수 있습니다. 예를 들어,이 정신 분열증 자바 코드의 경우
public void thingThatTakesAMapList(List<? extends Map> mapList) { /* Whatever */ }
이 스칼라 코드 또한
def thingThatTakesAMapList(mapList: List[_ <: Map[_, _]]) { /* Some incredibly wild subroutine */ }
와 동일하기 목록 사이의 구별을을 주목할 필요가 [임의]과 목록 [_]는 매우입니다 ... 세밀한. 전자가 Any의 목록이고 후자가 [I do not know/care] 목록입니다. _ 은 모두 Any 이외의입니다.예를 들어, 당신은 할 유효하지 않을 것
class SillyClass[T <: Map[_, _]]
이 서명으로 클래스를 가지고이
val thing = new SillyClass[Any]()
동안 이
val thing = new SillyClass[HashMap[_, _]]()
을하는 유효 할 수있다
과 같이 함수가 SillyClass를 매개 변수로 사용하는 경우 다음과 같이 쓸 수 있습니다.
def sillyClassTaker(sc: SillyClass[_])
이고 sc가 이 아니고이 유형 Any에 대해 매개 변수가 지정되어야합니다. Map [_, _]의 일부 알 수없는 서브 클래스를 통해 매개 변수화됩니다. 즉, 밑줄은 자리 표시 자이지만 유효 형식 매개 변수가 여전히 필요합니다. 그래서, 그 모든 시원하고 모든 ... 나는 그것을 너무 많이 사용하지 않는 것이 좋습니다. 와일드 카드 -y를 사용하거나 간단히 유형 매개 변수에 신경 쓰지 않으면 고려해야 할 좋은 옵션입니다. 타이핑을 절약 할 수있는이 같은 일을하고, 내 댓글에 제안하고 매우 간단합니다으로
당신은 어떤 입력을 저장 한 후, 당신은 유형 SomeClassAny ='같은 유형의 별칭을 시도 할 수있는 경우 SomeClass [AnyRef, Any]'. – huynhjl
기본 '값'(질문의 제목 참조)은 다음과 같이 약간 다릅니다 :'class Foobar (b : Int = 42)'; 타입 매개 변수에 대해 이야기하고 있습니다. –
@huynhjl 'type'이 가장 적합한 해결책이라고 보입니다. 당신은 대답으로 게시해야합니다 –