나는 또한 내가
내가 말할 것이 그것을 찾기 위해 시도 할 때 많은 생성자 내에서 사용되는 객체의 BufferedReader 보지 않았기 때문에이 좋은 소프트웨어 공학 연습 인 경우 알고 싶은 것이 그 API에서 파싱 및 구성의 "우려"에 근본적으로 동참하기에 좋은 디자인이 아닙니다. 클래스가 범용 클래스 인 경우 특히 중요합니다. 즉 다른 컨텍스트에서 사용/재사용 될 가능성이있는 것입니다.
public Foo(Reader reader) {
this();
this.load(reader);
}
public Foo() {
...
}
public void load(Reader reader) {
...
}
나는 것 :
그러나, 이러한 생성자는 건설 및 분석 작업을 수행 할 다른 더 근본적인 API 메소드/생성자에 대한 정말 "간이 overload"것이어야한다, 그것은 아무 문제가 없다 인수 유형으로 BufferedReader
대신 Reader
을 사용하십시오. 일부 유스 케이스에서는 BufferedReader
의 버퍼링이 필요하지 않으며 클래스가 제한된 구문 분석 기능 BufferedReader
을 사용하는 경우 API 메소드의 구현 세부 사항을 노출 시켜서는 안됩니다. 모든 것이 동일해야합니다. 당신이 내부적의 BufferedReader를 사용해야하는 경우
을 (. 그러나 어용 달리 지시 수), 및 출력 체인에 불필요한 필터의 (작은) 비용에 대한 걱정, 이렇게 :
public void load(Reader reader) {
BufferedReader br = (reader instanceof BufferedReader) ?
(BufferedReader) reader : new BufferedReader(reader);
}
업데이트 된 예를 다시
:
하드 배선 System.in
또는 클래스의 파일 이름은 나쁜 디자인입니다. 코드가 너무 융통성있게 만듭니다. 다른 곳에서 데이터를 읽는 간단한 구성 변경은 코드 변경을 수반 할 것입니다 ...코드 검색을 통해 다른 장소 등을 모두 찾을 수 있습니다.
나는 C++에서 그렇게 할 수 있을지 확신하지 못합니다. –