Ни один из двух классов в вашем примере ( IssueWithBankStuff или IssueWithOtherStuff ) никогда не имеет своих ссылок друг на друга set (например, в любом из них нет параметра конструкторакласс, который содержит ссылку на другой, и в конструкторах нет ничего нового, и нет мутаторов для них), что означает, что оба класса будут созданы с множественностью отношений в '0' (т. е. null ref)с самого начала и никогда не может быть «1». IssueWithBankStuff имеет переменную-член other , которая никогда не устанавливается, и IssueWithOtherStuff имеет переменную-член iban , которая также никогда не устанавливается.
Так что, на самом деле, это заботится о «0» части вашего требования.Однако для части '1' вам нужно либо где-то создать новые переменные-члены, либо для них нужны мутаторы.Например, мутатор для другой переменной-члена в IssueWithBankStuff (например, setOther (IssueWithOtherStuff other) {...} ) и мутатор для переменной-члена iban в IssueWithOtherStuff (например, setIban (IssueWithBankStuff iban) {...} ).Вызов таких мутаторов после инстанцирования дал бы вам часть «1» в кратности, в то же время позволяя начальную множественность «0» и, конечно, возвращая значение «0» множественности, передавая null в мутаторы в некоторой точке.
Если вы хотите, чтобы отношение всегда было 1 к 1 (а не от 0..1 до 0..1), то в Java есть ограниченные возможности для достижения этого из-за циклических ссылок в экземплярах.Простейшим способом было бы создать новый внутри конструктора другого, что-то вроде этого:
public class A
{
private B theRefToB;
public A ()
{
theRefToB = new B (this);
}
}
public class B
{
private A theRefToA;
public B (A a)
{
theRefToA = a;
}
}
Это, конечно, требует осторожности в использовании и большого количества встроенных комментариев, потому что вы могли легкосоздайте B напрямую, передав новый A () и получив два B.B, который вы создаете напрямую, будет сиротой, без подключенного A, а второй B будет создан внутри конструктора A. Возможно, вы сможете использовать некоторую умную область видимости, чтобы уменьшить этот риск, в C # вы можете использовать, возможно, внутренняя область, которая может помочь.Я должен был выкопать мои книги по Java.Отношения 1 к 1 следует отметить, что они - с точки зрения дизайна - обычно означают, что два типа на самом деле являются одним и тем же, или, по крайней мере, могут быть спроектированы / запрограммированы таким образом.
Я также отмечаючто у вас может быть проблема здесь с понятием смешения.У вас есть тип с именем Iban , на который ссылается IssueWithOtherStuff , затем вы также вызываете ссылку на IssueWithBankStuff 'iban'.Это довольно запутанно.