파라 메트릭 버전을 사용하면
- 기능 사용자에게 자세한 정보
- 작성할 수있는 프로그램 수를 제한합니다 (무료 버그 검사)
임의의 예로서, 2 차 방정식의 근을 계산하는 방법이 있다고 가정합니다.
int solve(int a, int b, int c) {
// My 7th grade math teacher is laughing somewhere
}
그리고 당신은 그것 이외의 것들과 같은 다른 종류의 숫자에서 작동하기를 원합니다 int
. 당신은 같은 것을 쓸 수 있습니다
Num solve(Num a, Num b, Num c){
...
}
문제는 이것이 원하는 것을 말하지 않는다는 것입니다. 그것은 말한다
같은 방식으로 숫자가 아닌 3 가지를 알려 주면 일종의 숫자를 다시 알려 드리겠습니다.
우리는 같은 일을 할 수없는 int sol = solve(a, b, c)
경우 a
, b
그리고 c
있습니다 int
우리는 방법이를 반환 위하여려고하고 있다는 것을 모르기 때문에들 int
결국! 우리가 해결책을 더 큰 표현으로 사용하고 싶다면 다운 캐스팅과기도로 어색한 춤으로 이어집니다.
함수 내에서 누군가 플로트, bigint 및 degree를 우리에게 건네 줄 수 있으며 우리는 그것들을 더하고 곱해야합니다. 우리는이 3 가지 클래스 사이의 연산이 횡설수설이기 때문에 이것을 정적으로 거부하고 싶습니다. 학위는 mod 360이므로 a.plus(b) = b.plus(a)
유사한 과실이 발생 하지 않습니다 .
서브 타이핑과 함께 파라 메트릭 다형성을 사용하면 타입이 실제로 의미하는 바를 나타 내기 때문에이 모든 것을 배제 할 수 있습니다
<T : Num> T solve(T a, T b, T c)
또는 "숫자 인 타입을 주면, 그 계수로 방정식을 풀 수 있습니다".
이것은 다른 많은 장소에서도 나타납니다. 예제의 또 다른 좋은 소스는 기능을하는 추상적 인 용기, 알라의 일종 끝났다 reverse
, sort
, map
, 등