2011-01-24 3 views
0
public LeNo generate (PrintStream stream) { 

    prepareOperands(stream); 
    LeNo l = (LeNo)left; 
    LeNo r = (LeNo)right; 

    if (l instanceof NumNo && r instanceof NumNo) { 
     return new NumNo((Integer.getInteger(l.name()).intValue()*Integer.getInteger(r.name()))); 
    } 
    if ((l instanceof NumNo && l.name().equals("0"))||(r instanceof NumNo && r.name().equals("0"))) { 
     return new NumNo(0); // cut of rest of code here.... 

반환 할 때 만들 필요없이 새로운 NumNo 메서드를 만들 수있는 방법이 있습니까?여기에서이 메서드의 인스턴스를 어떻게 만듭니 까?

아직 NumNo를 반환하고 싶지만 새로운 NumNo를 만들지는 않습니다.

+0

어떤 언어를? –

+0

예, 태그를 추가해 주셔서 감사합니다. –

답변

1

바로 만들려하지 않는 것이 단지 return new NumNo(0);입니까? 매번 같기 때문에? 그렇다면 해당 개체의 정적 인스턴스를 만들 수 있습니다. 예 : private static final NewNo ZERO = new NewNo (0);

이 패턴을 플라이 웨이트 패턴이라고하며, 자주 사용되는 인스턴스를 한 번만 생성합니다.

+0

"new NumNo"둘 다 생성되지 않는 것이 좋지만 첫 번째 인스턴스에는 적절한 설정자가 있으면 값을 설정하고 "l"또는 "r"을 반환 할 수 있다고 생각합니다. –

+0

반환 Num (0)을 만들려고하지만 거기에 새 것을 넣지는 않습니다. 그렇게하면 NumNo 메서드를 찾을 수 없다는 오류 메시지가 나타납니다. 그래서 나는 그것을 반환하기 전에 그것을 초기화해야한다고 생각합니다. –

0
return NumNo.getClass(); 

인스턴스 대신 클래스를 반환합니다.

예를 들어 java.lang.Class.newInstance()

와 인스턴스 만들기 :

klass = generate(stream); 
object = klass.newInstance(); 
+0

Jay에게 제안 해 주셔서 감사합니다. –

+0

주 newInstance()는 public이 아닌 인수 생성자가 있다고 가정합니다. –

관련 문제