2016-12-16 6 views
0

String이 (가) java에서 최종인 이유는 모두 argument에 대해 잘 알고 있습니다.javaslang CharSeq이 왜 마지막입니까?

그러나 javaslang의 CharSeq도 최종판인지 궁금합니다.

javaslang의 FP 영감과 하스켈이 type synonyms을 허용한다는 사실을 감안할 때 CharSeq이 final이 아닌 final이 될 수있는 좋은 기회라고 생각했을 것입니다.

최종본이 아닌 CharSeq은 빈 시체로 그것을 확장하여 좋은 동의어 유형을 만들 수있게합니다. 이렇게하면 추가 유형 안전이 필요한 경우에 대한 패턴의 상용구가 표시되지 않습니다.

이것이 왜 설계가 아닌지에 대한 좋은 이유가 있습니다. 그래서 여기에서 묻습니다.

업데이트 1612 년 12 월 : githubaslang 팀의 개선 요청을 #1764으로 제기했습니다.

답변

2

동일한 이유로 또는 반대로 적용됩니다.

자바 설계자는 불변성을 보장하는 것이 서브 클래스 기능을 잃어 버릴 가치가 있다고 믿었습니다.

Slang의 디자이너는 동의하고 "String"으로 동일한 접근 방식을 사용했습니다 (CharSeq).

이 디자인에 동의하지 않는 내부적으로 일관된 유일한 방법은 시간 테스트를 지켜본 String의 디자인에도 동의하지 않는 것입니다.

때로는 String을 하위 클래스로 만들 수는 없지만 그렇게 할 수는 없지만 자주 우리를 괴롭히지는 않습니다. 정말로 원하면 String을 작성하여 모든 메소드를 대리자 java.lang.String 대리인에게 위임 할 수 있습니다. 원하는만큼 서브 클래 싱 할 수 있습니다. 변경 가능성을 도입하지 않는 것은 귀하의 책임입니다.

+0

감사합니다. 동일한 이유가 모두 적용됩니까? 'CharSeq'는'String'이 아니기 때문에, JVM/클래스 로딩/보안/성능의 이유는 분명히 적용되지 않을까요? –

+0

'String'에 관한 마법은 없습니다 - 조작하는 private'char []'필드가있는 Java 클래스 일뿐입니다. 다른 클래스에 동일한 JVM/클래스 로딩/보안/성능 이유가 적용되지 않는 이유는 무엇입니까? – slim

+0

따라서 동일한 논증이 모든 수업에 적용됩니까? 즉, 'String'최종 인수는 단순히 'extends'가 항상 성능에 대해 '나쁘다'고 말하는 것입니다. 그렇다면 javaslang'CharSeq'이 JVM/클래스 로딩/보안/성능상의 이유로 인해 만기가되는 이유입니다 FP 설계 고려 사항? –