2011-09-07 4 views
2

C++에서생성자는 java에 bufferedReader 객체를 가질 수 있습니다.

와 같은 기본 스트림을 사용할 수 있습니다.
class c 
{ 
public: 
    c(istream fin =cin):fin(fin){} 


} 

비슷한 방식으로 java에서이 작업을 수행 할 수 있습니까? 아니면이 잘못된 연습입니다. 아니면 더 좋은 방법입니까? 콘솔에서 읽거나 파일에서 읽는 것을 선택하고 싶습니다.

class c 
{ 
    c() 
    { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
    } 
    c(int i) 
    { FileReader f=new FileReader(path); 
     BufferedReader br=new BufferedReader(f); 

    } 
} 
+0

나는 C++에서 그렇게 할 수 있을지 확신하지 못합니다. –

답변

2

확실히 자바로 할 수 있습니다. 발생할 수있는 IOException에 대해 뭔가를해야 할 수도 있습니다. 그러나, 더 나은 방법이 Reader하는 생성자를 정의 할 수 있습니다, 그래서 당신은 모든 데이터 소스 사용하여 인스턴스를 인스턴스화 수 :

class C { 
    C(Reader rdr) { 
     BufferedReader br = new BufferedReader(rdr); 
    } 
} 

(그건 그렇고을, 자바 코딩 규칙은 클래스 이름은 대문자로 시작하다 문자)

+0

고마워요 ... 또한 좋은 소프트웨어 엔지니어링 관행인지 알기를 원합니다. 왜냐하면 나는 – razi

3

"가능합니다."

그러나 대부분은 에게 가능한 한 작게하는 것이 생성자에서이라고 조언한다고 생각합니다. (그리고 나는 많은 사람들이 생성자가 잘못된 입력을 제외하고는을 실패해서는 안된다고 주장한다.) 생성자가 반드시 소비자 일 필요는 없습니다. 예를 들어, Scanner class의 작동 방식을 참조하십시오. 또한 Closeable 인터페이스는 리소스 관리를 도와줍니다.

해피 코딩.

+1

+1을 보려고했을 때 생성자 내에서 사용되는 bufferedreader 객체를 많이 보지 않았기 때문입니다. 나는 이것을 말하는 방법을 찾아 내려고 노력했다. 머리에 못을 박았습니다. – StriplingWarrior

0

나는 또한 내가

내가 말할 것이 그것을 찾기 위해 시도 할 때 많은 생성자 내에서 사용되는 객체의 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 또는 클래스의 파일 이름은 나쁜 디자인입니다. 코드가 너무 융통성있게 만듭니다. 다른 곳에서 데이터를 읽는 간단한 구성 변경은 코드 변경을 수반 할 것입니다 ...코드 검색을 통해 다른 장소 등을 모두 찾을 수 있습니다.

+0

고마워요 ... – razi

+0

생성자에서 메서드를 호출 할 것을 권장한다면 하위 클래스에서 재정의 할 수있는 메서드를 호출하는 것이 위험하다는 것을 지적해야합니다. 이로 인해 발생할 수있는 문제에 대한 간단한 설명은 [here] (http://www.informit.com/articles/article.aspx?p=20521)를 참조하십시오. –

관련 문제