Сегодня я нашел очень странную вещь. У меня есть класс со статическим внутренним классом.Объем статического внутреннего класса в 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. Как это возможно.
Пожалуйста, пост все соответствующий код. Код, который вы отправили, даже не передает компиляцию. – Eran
Ваш вопрос не совсем ясен для меня, но 'payment.getAgreement()' вернул бы экземпляр 'agreement' в' PDto' (и 'billingAgreement.agreementName =" Измененное имя соглашения "' устанавливает имя этого экземпляра), а 'Соглашение соглашение = новое соглашение(); 'создает независимый экземпляр, - но то, что делается с ним, не совсем понятно, поскольку отсутствует оператор return' createBillingAgreement (...) '(и, возможно, другие части). – Thomas
Просто сторона примечания, чтобы предотвратить любое потенциальное заблуждение: статические внутренние классы не имеют особых отношений с их внешними классами. Внешний класс действует только как форма пространства имен, но это все. – Thomas