Est-il possible d'instancier une classe enfant avec le parent de l'objet en java?

J'ai une classe de base-dire

class A {
   private String name;
   private String age;

   //setters and getters for same
}

et un enfant de la classe de dire

class B extends A {
 private String phone;
 private String address;

  //setters and getters for same
}

maintenant, j'ai une instance d'Un et en plus de cela je dois définir les champs de B, donc le code serait comme,

A instanceOfA = gotAFromSomewhere();
B instanceOfB = constructBFrom(instanceOfA);
instanceOfB.setPhone(getPhoneFromSomewhere());
instanceOfB.setAddress(getAddressFromSomewhere());

je peux instancier B avec A, mais je ne veux pas faire de cette façon,

B constructBFrom(A instanceOfA) {
  final B instanceOfB = new B();
  instanceOfB.setName(instanceOfA.getName());
  instanceOfB.setPhone(instanceOfA.getAge());

  return B;
}

plutôt ce que j'aimerais avoir une certaine utilité avec la fonction qui est suffisamment générique pour construire l'objet,

public class SomeUtility {

   public static <T1, T2> T2 constructFrom(T1 instanceOfT1, Class<T2> className) {

      T2 instatnceOfT2 = null;

      try {
         instatnceOfT2 = className.newInstance();
         /*
         * Identifies the fields in instanceOfT1 which has same name in T2
         * and sets only these fields and leaves the other fields as it is.
         */
      } catch (InstantiationException | IllegalAccessException e) {
         //handle exception
      }          

      return instatnceOfT2;
   }
}

de sorte que je peux l'utiliser comme,

B constructBFrom(A instanceOfA) {
   return SomeUtility.constructFrom(instanceOfA, B.class);
}

En outre, les cas d'utilisation ne sera pas seulement limitée à parent-enfant des classes, plutôt cette fonction d'utilité peut être utilisé pour l'utilisation de l'adaptateur cas.

PS - A et B sont des tiers les classes que j'ai pour utiliser ces classes seulement donc je ne peux pas faire toutes les modifications
en A et B.

Déclarer un B constructeur qui accepte un A.
Qu'attendez-vous de l'résultant B ressembler? Simplement une copie de l'instance de A avec les champs de B définie à null?
sonne comme un XY problème pour moi... Quelle est la réel problème que vous essayez de résoudre? Je ne peux pas imaginer que tout bon cas d'utilisation pour essayer de le faire.
un décent cas d'utilisation peut être par exemple la création d'une XXXList basé sur le générique List. Bien que vous avez probablement raison - je suis aussi assez méfiant sur les OP de la motivation 🙂
Il n'y a aucun moyen de définir le nom et l'âge d'un B de toute façon sans appeler explicitement setName et setAge, car comme l'écrit B n'a pas un constructeur qui prend le nom et l'âge en tant que paramètres. Par la voie, instanceOfA.getPhone() est une erreur de compilation, depuis A n'a pas phone ou getPhone.

OriginalL'auteur shelly | 2014-07-07

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *