Comment écrire une fonction Java qui renvoie des valeurs de plusieurs types de données?
Par exemple, je veux créer une fonction qui permet de retourner un nombre quelconque (négatif, nul ou positif).
Cependant, en fonction de certaines exceptions, j'aimerais que la fonction de retour Boolean
FALSE
Est-il un moyen d'écrire une fonction qui renvoie un int
ou un Boolean
?
Ok, donc cela a reçu beaucoup de réponses. Je comprends que je suis tout simplement en approchant le problème de manière incorrecte et je dois throw
quelque sorte d'Exception dans la méthode. Pour obtenir une meilleure réponse, je vais donner un exemple de code. Merci de ne pas faire plaisir 🙂
public class Quad {
public static void main (String[] args) {
double a, b, c;
a=1; b=-7; c=12;
System.out.println("x = " + quadratic(a, b, c, 1)); //x = 4.0
System.out.println("x = " + quadratic(a, b, c, -1)); //x = 3.0
//"invalid" coefficients. Let's throw an exception here. How do we handle the exception?
a=4; b=4; c=16;
System.out.println("x = " + quadratic(a, b, c, 1)); //x = NaN
System.out.println("x = " + quadratic(a, b, c, -1)); //x = NaN
}
public static double quadratic(double a, double b, double c, int polarity) {
double x = b*b - 4*a*c;
//When x < 0, Math.sqrt(x) retruns NaN
if (x < 0) {
/*
throw exception!
I understand this code can be adjusted to accommodate
imaginary numbers, but for the sake of this example,
let's just have this function throw an exception and
say the coefficients are invalid
*/
}
return (-b + Math.sqrt(x) * polarity) / (2*a);
}
}
source d'informationauteur maček
Vous devez vous connecter pour publier un commentaire.
Non, vous ne pouvez pas le faire en Java.
Vous pouviez retourner un
Object
. Et en retournant un objet que l'on pourrait techniquement retour d'une classe dérivée commejava.lang.Integer
oujava.lang.Boolean
. Cependant, je ne pense pas que c'est la meilleure idée.Vous peut techniquement le faire:
Ensuite, ce code ne compile:
Mais vous pouvez très certainement rencontrer des exceptions d'exécution si la méthode renvoie le mauvais type. Vous devez également renvoyer des objets au lieu de les primitives parce que T est effacée à java.lang.Objet, ce qui signifie le retour de type doit s'étendre de l'Objet (c'est à dire être un objet). L'exemple ci-dessus utilise de l'autoboxing pour atteindre une primitive de type de retour.
Certes, je ne recommanderais pas cette approche en raison de l'OMI, vous devez évaluer votre utilisation de la gestion des exceptions. Vous intercepter des exceptions dans des cas exceptionnels, si vous pouvez faire quelque chose avec cette exception (c'est à dire récupérer, persistent, réessayer, etc.). Les Exceptions sont un exception prévu de flux de travail, non pas comme une partie.
pas. le meilleur que vous pouvez faire est de retour sur l'instance d'une classe qui s'occupe de toutes les choses que vous pourriez vouloir revenir.
quelque chose comme
de toute évidence, vous avez besoin de jouer avec les noms....
Aussi, cela semble être une odeur de code. Vous pourriez être en mesure de supprimer la nécessité de faire quelque chose comme cela, en qualifiant ce chemin que vous voulez à l'extérieur de votre fonction, puis d'appeler une fonction spécifique pour obtenir un booléen ou une fonction spécifique pour obtenir un int, en fonction de la qualification.
Écrire une fonction qui renvoie un
Object
. Ont il soit de retour leBoolean
ouInteger
wrapper objets. Puis utiliser instanceof à comprendre pour l'utiliser.Pas, on renvoie la référence à un client.
Vous pouvez écrire une réponse de l'objet qui encapsule une valeur booléenne et un int ensemble et de définir les valeurs en fonction de vos envies.
Mais si j'étais un utilisateur je pense que votre conception est source de confusion.
mon professeur a eu une idée géniale pour un tryParse C# comme méthode en java espère que cela aide
Cela peut ne pas être la meilleure solution en fonction de ce que vous voulez faire, mais un moyen facile de résoudre le problème vient peut-être d'avoir la fonction retourne un int constant ou à l'extérieur de l'intervalle de valeurs possibles (comme RETURNED_FALSE/VRAI) et vérifier que le.
Je dirais que c'est possible. Mais pas directement.
Je n'ai pas passés par le programme donné dans la question. Je réponds à cela en sachant que c'est un vieux post. Pourrait aider quelqu'un.
Ajouter vos valeurs à une Carte comme ci-dessous. Et le faire avec sa clé!
Remarque:
Ce n'est pas une bonne pratique. Mais il permet parfois quand c'est nécessaire!
les paramètres inout ne fonctionne que pour les objets qui peuvent être mutés. Pour la Chaîne de paramètres inout, passer StringBuilders au lieu de Chaînes, puis replace() de leurs valeurs.