J'ai une méthode qui crée un objet appelé "OtherItem1". La méthode "getItemName" provient de la classe et renvoie une chaîne appelée "itemName". Cela fonctionne bien lorsque j'appelle la méthode "getItemName" sur l'objet "OtherItem1" dans cette méthode. Cependant, lorsque je ne suis pas en mesure d'appeler cette méthode sur l'objet dans ma méthode principale. Existe-t-il un moyen de rendre cet objet accessible pour d'autres méthodes?

public static void createOtherItem() {
        System.out.print("Item Name : ");
        itemName = input.next();
        System.out.print("Price : ");
        price = input.nextDouble();
        System.out.print("Id : ");
        id = input.nextInt();
        System.out.print("Stock: ");
        stock = input.nextInt();
        System.out.print("Department : ");
        department = input.nextInt();
        System.out.print("Details : ");
        details = input.next();

        OtherItem OtherItem1 = new OtherItem(itemName, price, id, stock, department, details);

        OtherItem1.getItemName();
    }

    public static void main(String[] args) {
        createOtherItem();
        OtherItem1.getItemName();
    }
-1
Ganesh 20 nov. 2018 à 23:43

3 réponses

Meilleure réponse

Vous pouvez le déclarer comme une variable statique en dehors de la méthode.

private static OtherItem OtherItem1;

public static void createOtherItem() {
    // existing code here, down to the object creation...

    // it's already declared, so you don't need to specify the type again
    OtherItem1 = new OtherItem(itemName, price, id, stock, department, details);
    OtherItem1.getItemName();
}

Mais comme Carcigenicate l'a suggéré, je pense qu'il serait préférable de simplement le renvoyer à la méthode appelante et de l'utiliser aussi comme variable locale.

public static OtherItem createOtherItem() {
    // Existing code
    return OtherItem1;
}
public static void main(String[] args) {
    OtherItem otherItem1 = createOtherItem();
    otherItem1.getItemName();
}
0
Blair 20 nov. 2018 à 20:58

OtherItem1 n'existe que dans la portée de la méthode createOtherItem et pas en dehors de celle-ci.

Vous pouvez par exemple renvoyer OtherItem1 à partir de la méthode et utiliser cet objet:

public static OtherItem createOtherItem() {
    ...
    return OtherItem1;
}

Et puis dans la méthode main:

OtherItem item = createOtherItem();

Et veuillez ne pas utiliser de noms commençant par des lettres majuscules pour les noms de variables. Ceci est contraire aux conventions de dénomination généralement acceptées.

1
Donat 21 nov. 2018 à 11:03

Juste return l'objet de la méthode.

Remplacez la signature de la méthode par:

//            No longer void
public static OtherItem createOtherItem() {
    System.out.print("Item Name : ");
    itemName = input.next();
    System.out.print("Price : ");
    price = input.nextDouble();
    System.out.print("Id : ");
    id = input.nextInt();
    System.out.print("Stock: ");
    stock = input.nextInt();
    System.out.print("Department : ");
    department = input.nextInt();
    System.out.print("Details : ");
    details = input.next();

    OtherItem OtherItem1 = new OtherItem(itemName, price, id, stock, department, details);

    OtherItem1.getItemName();

    // Return it here
    return OtherItem1;
}

public static void main(String[] args) {

    // Then receive the returned item here
    OtherItem returnedItem = createOtherItem();

    // And use it here
    returnedItem.getItemName();
}

Quelques notes secondaires:

  • Votre indentation est très étrange. 4 espaces d'indentation sont standard. Vous semblez mélanger des tabulations et des espaces, et utiliser 6 espaces, ou quelque chose comme ça. Il est difficile de dire ce qui se passe dans l'éditeur mobile, mais il était difficile de s'aligner correctement.

  • N'utilisez pas de noms en majuscules pour les variables simples. Les noms majuscules (comme OtherItem1) sont réservés aux noms de classe / interface. Des conventions de dénomination incorrectes rendent votre code plus difficile à lire.

1
Carcigenicate 21 nov. 2018 à 21:34