Должен ли я использовать объявление или this () при передаче дескриптора дочернему классу в Java? - PullRequest
0 голосов
/ 14 февраля 2012

Если у меня есть класс, который создает новый объект и передает ссылку на this () этому новому объекту, должен ли я просто использовать this () или я должен создать объявление для этого класса и вместо него передать объявление. Я не могу найти четкий пример того, когда я использовал бы каждый случай при передаче дескриптора дочернему объекту.

public class ThisClass {

    ThisClass decHandle;
    ThisClass someThing = this;
    public String decString = "some string";
    SomeOtherClass classObject1 = new SomeOtherClass(this);
    SomeOtherClass classObject2 = new SomeOtherClass(decHandle);
    SomeOtherClass classObject3 = new SomeOtherClass(someThing);

}

public class SomeOtherClass {

    ThisClass decHandle;
    public SomeOtherClass (ThisClass handle){
        decHandle = handle; 
    }
    String valueForOther = decHandle.someThing;

}

Мне в основном нужно знать, какой метод лучше всего передавать при передаче дескрипторов дочернему классу от родителя.

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

Здесь довольно много ошибок.

1) Последнее утверждение в SomeOtherClass должно быть

String valueForOther = decHandle.decString;

вместо

String valueForOther = decHandle.someThing;

2) Когда вы говорите

SomeOtherClass classObject1 = new SomeOtherClass(this);

вызовет исключение NullPointerException, поскольку вы еще не создали объект. «это» относится к текущему объекту. В вашем коде нет объекта, поэтому эта строка выдаст исключение. То же самое относится и к следующей строке.

3) «Дочерний» означает, что класс наследует от родителя. То, что SomeOtherClass имеет ссылку на ThisClass, не означает, что SomeOtherClass является дочерним.

4) Это не очень хорошая практика, чтобы участники класса были публично видны.

Хорошо, вот как вы это сделаете.

public class ThisClass 
{
    private String decString = "some string";
    private SomeOtherClass someOtherClass;

    public ThisClass()
    {
        someOtherClass = new SomeOtherClass(this);
    }

    public String getDecString()
    {
        return decString;   
    }
}

public class SomeOtherClass 
{

    private ThisClass decHandle;
    private String valueForOther;

    public SomeOtherClass (ThisClass handle)
    {
        decHandle = handle;
        valueForOther = decHandle.getDecString(); 
    }  
}  
0 голосов
/ 14 февраля 2012

Рекомендуется использовать this, когда вам нужно передать ссылку на этот объект.Вот для чего это (помимо всего прочего).Если вы попытаетесь избежать его использования, вы в конечном итоге сделаете свой код более многословным и менее читабельным и / или будете использовать больше памяти во время выполнения.например, различать поля и местные жители) спорны, но это трудно сделать убедительный случай, что это «лучшая практика» ... или нет. Во всяком случае, это другой вопрос.)

0 голосов
/ 14 февраля 2012

Сделайте это:

SomeOtherClass classObject1 = new SomeOtherClass(this);

Создание переменной экземпляра, которая указывает на this, ничего не дает: вы просто дублируете то, что в любом случае делает this.

EDIT: Помните, что все переменные (кроме примитивов) являются ссылками в Java, поэтому this и someThing в вашем примере обе указывают на один и тот же объект. Тогда не имеет значения, какой из них вы передаете SomeOtherClass; в любом случае он получит ссылку на тот же объект.

Локальная переменная handle в SomeOtherClass не знает и не заботится, откуда взялась ее ссылка.

Обратите внимание, что в вашем примере ThisClass.decHandle имеет значение null, поскольку вы не присвоили ему значение. (На самом деле ThisClass, вероятно, не будет компилироваться из-за неинициализированного значения, но я этого не проверял)

...