4
votes

Définition d'un identifiant de liste par programme

Une classe java contient une variable d'instance qui est une List . Je dois définir le type d'objet que cette Liste contient dans une variable String .

Liste privée maListe; String VARIABLE = "BasicDegreeClass";

Est-ce autorisé à faire dans JAVA Si oui, comment cela peut-il être réalisé?

Merci d'avance


4 commentaires

Je ne sais pas exactement quel est votre cas. Est-ce que ça va marcher ? classe Test {Liste liste; } .


Je voulais faire quelque chose comme ceci List myList = new ArrayList ();


Ouais c'est ce que j'ai fait ci-dessus. Utilisez un type générique.


Je ne sais pas ce que vous demandez, mais il vaut mieux utiliser génériques Java . Ou vous pouvez utiliser quelque chose comme String variableType = myList.get (index) .class.getName () . Mais assurez-vous que votre liste est initialisée (non nulle) et non vide, et notez que vous ne devez jamais déclarer une variable package-private avec un nom d'identifiant en majuscules.


3 Réponses :


0
votes

Vous pouvez créer une Liste uniquement avec la classe et non avec les types primitifs ou ses valeurs.

Exemple:-

List<Integer> a =  new ArrayList<>();
List<YourObject> obj = new ArrayList<>();

Mais si vous essayez avec types primitifs alors vous obtiendrez.

 entrez la description de l'image ici


0 commentaires

1
votes

Il serait préférable d'utiliser des génériques comme celui-ci

Liste privée maListe;

documentation ici

mais il est possible d'utiliser une chaîne pour représenter un nom de classe ou agir comme un identifiant unique, étant donné que vous le supportez vous-même


0 commentaires

3
votes

Tout d'abord, vous devrez créer une liste où T est le type d'objets contenus dans la liste.

Donc, votre code devrait se lire comme

liste privée maListe ;

Depuis le javadoc,

le type d'éléments de cette liste.

Dans votre cas, le compilateur ne connaîtra pas le type d'éléments à ajouter à votre liste et donc cela ne fonctionnera pas.

Cependant, vous pouvez utiliser Liste comme alternative, mais c'est généralement une odeur de code à long terme et très difficile à maintenir

  • Cela tue l'idée des génériques.
  • Rend votre code sujet à ClassCastException.
  • Dans un monde parfait et même si vous êtes en sécurité lors de l'ajout d'éléments, vous devrez supprimer l'avertissement partout et renvoyer vers le type.

Solution appropriée : vous pouvez écrire une interface à laquelle tous vos objets de l'ArrayList adhéreront. Continuez avec quelque chose comme

getCastedList(myList, Class.forName(VARIABLE));

Ne vous inquiétez pas du type d'objet dans la liste. J'espère que cela vous aidera!

Si vous êtes trop spécifique pour enregistrer dans String, voici une solution de contournement.

public static <T> List<T> getCastedList(List<Object> objList, Class<T> clazz) {
        List<T> newList = new ArrayList<T>();
        if (objList != null) {
            for (Object object : objList) {
                if (object != null && clazz.isAssignableFrom(object.getClass())) {
                    newList.add((T) object);
                }
            }
        }
        return newList;
    }

Et appelez cela comme

XXX


1 commentaires

Heureux d'entendre @NiazAhsan :)