Создание переменной гибкого типа данных в JAVA - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть class A, class B и class C.

В class C, я объявляю переменную как:

private A a;
private B b;
private ? thirdVariable;

Я хочу объявить третийпеременная с типом данных может быть A или B .Так что я могу присвоить этой переменной либо значение a, либо b согласно моему желанию.

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы можете использовать Polymorphism с (abstract) class или Interface

  • Interface:

    public Interface Parent{        }
    
    public class A implements Parent {        }
    
    public class B implements Parent {        }
    
    public class C {
        private A a;
        private B b;
        private Parent thirdVariable;
    }
    
  • (abstract) class: реферат является факультативным и зависит от дизайна и функциональности, которые вы должны сделать

    public (abstract) class Parent{        }
    
    public class A extends Parent {        }
    
    public class B extends Parent {        }
    
    public class C {
        private A a;
        private B b;
        private Parent thirdVariable;
    }
    
0 голосов
/ 07 февраля 2019

Вы не можете сделать это, если между A & B нет никакой связи. Если вы хотите это сделать, вам следует использовать интерфейс / класс, который будет расширен на A & B.

class X{}

class A extends X{
}

class B extends X{
}

private X thirdVariable;

ЕслиВы действительно хотите использовать Generic, затем сделать свой универсальный конструктор в классе C, а затем передать объект A/B в соответствии с общим, как показано ниже.

class C<T> {
    private T thirdVariable;

    C(T t) {
        thirdVariable = t;
    }
}

Когда вы создаете объект C, тогда выможете указать и передать тип объекта, как показано ниже.

    A a = new A();
    C<A> c1 = new C<A>(a);
    B b = new B();
    C<B> c2 = new C<B>(b);
0 голосов
/ 07 февраля 2019

Вы можете создать (возможно, абстрактный) суперкласс (назовем его class X) и сделать так, чтобы и A, и B расширялись от него.Тогда ваша третья переменная может быть объявлена ​​как:

private X thirdVariable;

Аналогично, вы можете создать интерфейс (назовем его interface Y) и сделать так, чтобы A и B реализовали его.Тогда ваша третья переменная может быть объявлена ​​следующим образом:

private Y thirdVariable;

Таким образом, в основном вы хотите использовать полиморфизм с пользой, потому что обобщения не достаточно гибки, чтобы выразить отношение типа, подобное тому, которое вы хотите.

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