하자 내가 3 개 클래스 A, B, C, 내 홈페이지를 말한다. B 내가 그들 모두 내 주를 포함에 스캐너를 사용하려면 A를 확장합니다. 나는 상속에 의해 스캐너를 이동해야합니다 아니면 정적 사용하고 나의 주 나의 스캐너를 선언해야?
내가 이쪽을 봐하려고 노력하지만, 더 명확한 대답을하지 않았다 : 나는 다른 클래스의 스캐너 개체를 사용할 수있는 방법이 있습니까?
public class Main {
public static Scanner staticScanner = new Scanner (System.in);
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
A a = new A(sc);
C c = new C();
c.cDoSomething(sc);
sc.close();
}
public class A {
private Scanner sc;
public A (Scanner sc){
this.sc = sc;
}
public void aDoSomething(){
B b = new B();
b.bDoSomething(sc);
}
public class B extends A {
public void bDoSomething(Scanner sc){
}
public class C {
public void cDoSomething(Scanner sc){
}
나는 내가 더 잘하고 사용할 올바른 하나입니다 방법을 이해하고자 위에 말했듯이. staticScanner 내 메인 클래스하여 전화를 걸거나 필요에 따라 클래스 사이에 내 스캐너 SC 이동
여기 답이 필요한 스캐너의 상태가 다른 클래스의 변수와 얼마나 많은 별도의 방법이나 호출의 상태로 할 수있는 방법을 결합에 특히 관해서 기본 클래스와 상황의 세부 사항의 일부에 의존 할 수 있다고 생각 .
그러나 일반적으로, 나는 개인적으로 선호하는 c.doSomething(sc);
메소드 호출 사이의 클래스 C에 보관되고 더 내부 상태가없는 경우. 즉 우리는이없는 c.doSomething1(sc)
및 c.doSomething2(sc)
그 필요성으로 인해 내부 상태가 수정되는 동일한 스캐너에 대한 순서로 호출 할 수 C
.
우리가 생성자의 클래스에 스캐너를 통과하고 그것에 대한 참조를 유지하는 완벽한 의미가있는 스캐너 래퍼 (또는 장식의 형태)을 효과적으로 무엇 만드는 경우 카운터 인수는 것을. 즉 우리는 같은 것을 갖고 싶어 :
MyReader reader = new MyReader(scanner);
MyObject myObject = reader.readNextMyObject();
그러나, 나는 우리가 코드에서 인터리브 여러 래퍼를 통해 같은 스캐너에서 읽는다면 그것은 매우 혼란 스러울 것이라고 생각 :
// I think the below would be UGLY, at least imho.
MyReaderA readerA = new MyReaderA(scanner);
MyReaderB readerB = new MyReaderB(scanner);
MyObjectX obj1 = readerA.readMyObject();
MyObjectY obj2 = readerB.readMyObject();
나는 두 개의 다른 독자가 같은 스캐너를 운영하고 인덱스를 이동하는 것을 혼동 될 것이다 생각합니다.