web-dev-qa-db-fra.com

Ecrire une fonction dans la méthode principale - Java

Pouvez-vous écrire une méthode à l'intérieur de la méthode principale? Par exemple, j'ai trouvé ce code:

public class TestMax {
     public static void main(String[] args) {
        int i = 5;
        int j = 2;
        int k = max(i, j);
        System.out.println("The maximum between is " + k);
     }

     public static int max(int num1, int num2) {
        int result;
        if (num1 > num2)
           result = num1;
        else
           result = num2;

        return result; 
     }
}

La méthode max peut-elle être codée à l'intérieur de la méthode principale?

8
user3126119

Lorsque Java 8 sort, la fonctionnalité Closure/Lambda devrait faire en sorte que vous puissiez définir la méthode max dans la méthode principale. Jusque-là, vous ne pourrez définir une méthode dans la méthode principale dans des circonstances particulières.

En l'occurrence, votre question tombe dans la circonstance spéciale. Il existe une interface (comparable) qui résume la logique de comparaison de deux choses du même type. Par conséquent, le code pourrait être réécrit comme suit:

public class TestMax {
  public static void main(String[] args) {
    int i = 5;
    int j = 2;
    Comparator<Integer> compare = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            // Because Integer already implements the method Comparable,
            // This could be changed to "return o1.compareTo(o2);"
            return o1 - o2;
        }
    };
    // Note that this will autobox your ints to Integers.
    int k = compare.compare(i, j) > 0 ? i : j;
    System.out.println("The maximum between is " + k);
  }
}

Cela ne fonctionne que parce que l'interface de comparaison existe déjà dans la distribution standard Java. Le code pourrait être amélioré grâce à l'utilisation de bibliothèques. Si j'écrivais ce code, j'ajouterais Google Guava à mon classpath. Ensuite, je pourrais écrire ce qui suit:

public class TestMax {
  public static void main(String[] args) {
    int i = 5;
    int j = 2;
    // The 'natural' ordering means use the compareTo method that is defined on Integer.
    int k = Ordering.<Integer>natural().max(i, j);
    System.out.println("The maximum between is " + k);
  }
}

Je soupçonne que votre question portait davantage sur les capacités du langage Java plutôt que sur les pratiques standard concernant les numéros de commande (et d'autres choses). Donc, cela pourrait ne pas être utile, mais je pensais partagerais juste au cas où.

6
Spina

Non, vous ne pouvez pas déclarer une méthode dans une autre méthode.

Si vous examinez attentivement le code que vous avez fourni, il s'agit simplement d'un mauvais formatage, la méthode main se termine avant la déclaration de la méthode max.

7
Keppil

Oui, cela est possible par lembda expression: pour cela vous devez utiliser au moins Java 8

import Java.util.function.BiFunction;

public class TestMax {
    public static void main(String[] args) {
        BiFunction<Integer, Integer, Integer> max = (a,b)-> a>b ? a : b;

        //now you can call method

        int i = 5;
        int j = 2;
        int k = max.apply(i, j);
        System.out.println("The maximum between is " + k);
    }
}

BiFunction est une interface fonctionnelle Java convertit en interne le code d'expression lambda en classe anonymouse qui implémente l'interface BiFunction et remplace la méthode apply () qui contient votre code

Interne (compilateur considéré) le code est:

BiFunction<Integer, Integer, Integer> max = new BiFunction<Integer, Integer, Integer>(){
    public Integer apply(Integer a, Integer b){
        return a>b ? a : b; //your code
    }
}

Non. On ne peut pas définir directement une méthode dans des méthodes en Java. Sauf conditions spéciales, comme les méthodes pré-déclarées dans les classes intégrées. La méthode préférable est de définir la méthode dans la même classe et bien sûr de l'appeler.

1
Kapil Tapsi

Si vous voulez l'utiliser, dans ce scénario, faites-le static et placez-le dans la classe mais en dehors de la méthode principale (comme vous l'avez dans votre code). Ensuite, vous pouvez l'appeler depuis main().

1
Jim Garrison

toi cannot directly define methods à l'intérieur d'autres méthodes dans Java (méthode principale aussi).

You should write the method in the same class as main. 

Note: Vous pouvez déclarer une classe avec des méthodes à l'intérieur d'une autre méthode

1
Sajad Karuthedath

Avec une mise en forme correcte, vous remarquerez que la méthode max apparaît dans la même classe que la méthode main, mais elle n'est pas DANS la méthode main.

1
Mad Physicist