Нарезка объектов в Java - PullRequest
1 голос
/ 25 марта 2010

Можете ли вы взять объект подкласса и каким-то образом преобразовать его в объект того же типа, что и родительский класс, и одновременно разрезать все поля, которые не являются частью родительского класса?

Я знаю, что вы можете сделать это в C ++, но я не знаю, как это сделать в Java.

Ответы [ 5 ]

5 голосов
/ 25 марта 2010

Вы не можете изменить тип времени выполнения объекта в Java (хотя вы можете назначить ссылку и объект для супертипа и привести обратно к подтипу). Вам нужно будет создать новый объект типа времени исполнения суперкласса.

Я бы вообще рекомендовал, чтобы все классы были абстрактными или листовыми (концептуально final, если на самом деле не помечены как таковые по прагматическим причинам).

4 голосов
/ 25 марта 2010

Попробуйте это:

class Parent {
    private int fieldA;

    Parent(int fieldA) {
        this.fieldA = fieldA;
    }

    Parent(Parent object) {
        this.fieldA = object.fieldA;
    }
}

class Child extends Parent {
    private int fieldB;

    Child(int fieldA, int fieldB) {
        super(fieldA);
        this.fieldB = fieldB;
    }
}

Тогда вы можете сделать что-то вроде Parent parent = new Parent(child);, и вы достигнете желаемого результата, но, как говорили другие, это будет не преобразование , а скорее создание совершенно нового объекта.

0 голосов
/ 25 марта 2010

Я не уверен, почему вы хотите это сделать, но вы можете иметь два класса, реализующих один и тот же интерфейс, а затем ссылаться на объекты через интерфейс.Например:

класс A реализует что-то ...
класс B реализует что-то ...

something = new A();    
something = new B();
0 голосов
/ 25 марта 2010

Я не видел среза типов в Java. И я не думаю, что в этом есть особая необходимость ...

Вы можете в любое время сделать это на Java

Object x = new String("hello");

Здесь у вас не будет всех функций, которые предоставляет класс String

0 голосов
/ 25 марта 2010

Прямого аналога нарезки в Java нет, но я уверен, что вы можете смоделировать это, добавив функцию-член к родительскому или дочернему элементу, которая создаст для вас новый родительский экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...