는 다음과 같은 세 가지 클래스를 고려 코드에 명확한 설계 방법을 사용 - 및
Class A
{
static DrMag drmag; //Avoid static variables
public DrMag validateCheck()
{
drmag.setName("Kane");
drmag.setType("Student");
drmag.setMarks(100);
return drmag;
}
public void saveState()
{
if(drmag != null)
{
//do something usefull
log.info("GREAT! drmag is not null");
}
else
{
log.info("OOPS! drmag is null");
}
}
}
class B
{
A a = new A();
DrMag drmag = a.validateCheck();
}
class C
{
A a = new A();
a.saveState();
}
가 위는 A, B 및 C
라는 이름으로 세 가지 기본 클래스입니다먼저 B가
이라고를drmag
을 초기화 한 다음
drmag
값을 확인하는 C가 호출됩니다.
drmag
이 정적 인 경우 eveything이 정상이며 결과가 나타납니다. "Ghost! drmag가 null이 아닙니다."
drmag가 정적이 아니라면 "OOPS! drmag is null"이라는 출력이 표시됩니다.
이것은 우리가 모두 클래스 B에서의 새로운 객체를 생성하고
C.
그러나 정적이 좋은 것으로 간주되지 않는 변수를 유지하고 있기 때문에 예상대로입니다. "OOPS -그래서 하나의 방법은 B에서 전화에서 drmag
변수 설정 변수 drmag에 대한 클래스 A의 getter 및 setter 메소드를 만든 다음 C. 그러나이 여전히 출력을주고에서 전화에서 drmag
변수를 얻을 수 있습니다! drmag가 null입니다. "
class B
{
A a = new A();
DrMag drmag = a.validateCheck();
C c = new C(drmag); //this will call constructor of class C and initialize `drmag`.
}
class C
{
DrMag drmag;
public C(DrMag drmag)
{
this.drmag = drmag;
}
A a = new A();
a.saveState(drmag);
}
class A
{
DrMag drmag;
public DrMag validateCheck()
{
drmag = new DrMag();
drmag.setName("Kane");
drmag.setType("Student");
drmag.setMarks(100);
return drmag;
}
public void saveState(DrMag drmag)
{
if(drmag != null)
{
//do something usefull
log.info("GREAT! drmag is not null");
}
else
{
log.info("OOPS! drmag is null");
}
}
}
이 디자인은 다시 결함을 가지고 있으며, 복잡한 보이는 -
생각 다른 방법은 C 클래스의 생성자를 만들고 우리가 같은 drmag
를 초기화 할 수있는 클래스 B에서 호출하는 것입니다.
static
을 사용하지 않고이 상황을 해결할 명확한 방법이 있습니까?
'drmag' 변수로 무엇을 시도하고 있습니까? 어떤 이유로 당신은 그것이 정적 일 필요가 있다고 결정 했습니까? – Makoto
DrMag는 name, students, marks와 같은 일부 필드를 포함하는 클래스입니다. 그래서'validateCheck()'메소드는 name, students, marks에 값을 할당하고'drmag'를 리턴하는 것과 같은 일을합니다. 정적이 아니면 출력이 항상 "OOPS! drmag가 null"이기 때문에 정적이어야한다고 결정했습니다. 그 이유는 그 질문에서 설명됩니다. –
나는 아직도 혼란 스럽다. 당신이 설명하는 것은'DrMag'는 데이터를 포함하는 객체입니다; 콩 같은 거 맞지? 당신이 그것이 정적 일 필요가 있다고 느끼는 이유가 있습니까?진짜 질문은,이 bean에 데이터를 넣는 곳은 어디인가요? 그리고'validateCheck' 메소드에'DrMag'의 인스턴스를 전달할 수없는 이유는 무엇입니까? – Makoto