2014-08-27 1 views

답변

0

Color.java 파일의 source code은 Google 엔지니어가 명시 적으로 Color 클래스의 public 생성자를 작성하지 않았 음을 보여줍니다.

Color 클래스의 API documentation은 공용 생성자를 나열하지만 Java는 implicit default constructor이며 문서에 나열된 생성자입니다.

여기

실제 가능한 질문 중 하나입니다/또는

  • 왜 클래스 문서의 생성자 섹션에서 구글 안드로이드 문서 목록 암시 적 기본 생성자합니까?
  • 정적 구성원 만 가진 클래스를 만들 수있는 경우 Java에 암시 적 기본 생성자가있는 이유는 무엇입니까?

Google에서는 암시 적 기본 생성자를 나열하기로 결정한 실수 나 잘못된 디자인 결정이라고 생각하지 않습니다. 클래스에 생성자를 정의하여 모든 생성자에 대한 액세스를 제한 할 수 있지만 추가 코드가 필요할뿐 아니라 정적 멤버가있는 클래스의 기본 생성자를 쓸모없이 만들면 클래스의 오용이 발생하지 않습니다.

정적 멤버 만 가진 클래스에서 암시 적 기본 생성자를 방지하기 위해 컴파일러 최적화를 사용하는 것이 좋지만 다른 스레드에 대해서는 질문입니다.

tl; dr 아니, 실수가 아니야.

+0

@ dragon66 나는 이것이 개인 개발자 문제가 아니라 오히려 당신이 좋아할 수도 있고 그렇지 않을 수도있는 언어 기능이라고 주장 할 것이다. 다른 언어는 다르게 접근합니다. 당신이 정말로 그것을 좋아하지 않는다면, 당신은 풀 요청을 할 수 있습니다, 안드로이드는 오픈 소스입니다. – yiati

+0

아니요, 개인 생성자를 사용하더라도 여전히 리플렉션으로 인스턴스를 생성 할 수 있습니다. 개별 개발자가이 문제를 해결할 수있는 유일한 방법은 private 생성자를 구현하고 private 생성자에서 예외를 throw하는 것입니다. 개별 개발자가 해결할 수있는 문제는 아닙니다. 두 번째 요점을 중심으로 논의했듯이이 문제에 대한 컴파일러 최적화가있을 수 있지만 개별 개발자가 해결할 수있는 문제는 아닙니다. – yiati

+0

반사가 해킹하지 않습니다. – yiati

0

아마도 일관성과 잠재적 인 미래 사용은 엔지니어가 아무 것도하지 않더라도 생성자를 작성하는 이유 일 수 있습니다. 그러나 엔지니어는 생성자를 작성하지 않았을 수 있습니다. 생성자가없는 경우 컴파일러에서 기본 공용 생성자를 만듭니다.

답변은 given here입니다. this에 링크되어 있습니다.

아마도 어느 정도 자동 생성 된 설명서는 엔지니어가 생성자를 생성하지 않은 경우에도 기본 생성자의 존재를 알려주고 있습니다.

관련 문제