2016-07-28 2 views
-2

Сегодня я нашел очень странную вещь. У меня есть класс со статическим внутренним классом.Объем статического внутреннего класса в java

public class PDto { 

private Agreement agreement = new Agreement(); 

    public static class Agreement{ 
     public String agreementName; 
     public String agreementDescription; 
     public String currency; 
    } 

    public Agreement getAgreement() { 
     return agreement; 
    } 

    public void setAgreement(Agreement agreement) { 
     this.agreement = agreement; 
    } 
} 

Другой класс ClassA, который имеет следующий метод: -

private Agreement createBillingAgreement(PDto payment) { 

    PDto.Agreement billingAgreement = payment.getAgreement(); 
    Agreement agreement = new Agreement(); 
    agreement.setName(billingAgreement.agreementName); 
    agreement.setDescription(billingAgreement.agreementDescription); 
    billingAgreement.agreementName = "Changed agreeement Name" ; 
} 

код класса B, который вызывает метод класса А

classBService.createBillingAgreement(payment); 
System.out.println("Changed billing agreement name : " + payment.getAgreement().agreementName); 

И когда я печатаю имя соглашения от класса ClassB , Я получаю значение, которое было установлено в методе createBillingAgreement класса A. Как это возможно.

+1

Пожалуйста, пост все соответствующий код. Код, который вы отправили, даже не передает компиляцию. – Eran

+0

Ваш вопрос не совсем ясен для меня, но 'payment.getAgreement()' вернул бы экземпляр 'agreement' в' PDto' (и 'billingAgreement.agreementName =" Измененное имя соглашения "' устанавливает имя этого экземпляра), а 'Соглашение соглашение = новое соглашение(); 'создает независимый экземпляр, - но то, что делается с ним, не совсем понятно, поскольку отсутствует оператор return' createBillingAgreement (...) '(и, возможно, другие части). – Thomas

+0

Просто сторона примечания, чтобы предотвратить любое потенциальное заблуждение: статические внутренние классы не имеют особых отношений с их внешними классами. Внешний класс действует только как форма пространства имен, но это все. – Thomas

ответ

1

Статический внутренний класс используется для доступа к одному классу статически. Например:

public class Parent{ 
    public static class Child{ 
     public void aMethod(String s){ 
      System.out.println("Hi!" + s); 
     } 
    } 
} 

public class AnotherClass{ 
    public void AnotherMethod(){ 
     Parent.Child.aMethod("From AnotherClass"); 
    } 
} 

OUT:

Привет! От AnotherClass

Или в вашем случае:

PTdo.Agreement 

     ^

это статический класс

Смежные вопросы