Java Paramètres De La Chaîne
Je suis issu d'une .net d'arrière-plan et vous souhaitez connaître la façon de créer une méthode qui retourne un booléen et modifie une chaîne qui a été adoptée par le paramètre. Je comprends les Chaînes sont immuables en Java donc ci-dessous l'extrait produira toujours une chaîne vide. Je suis contraint de return boolean seulement. Des Exceptions peuvent pas être jetés. Si j'ai besoin d'envelopper la classe String, disons, d'un StringHolder, ce package que je pourrais trouver cela dans.
public static void DoStuff()
{
String msg = "";
if (GetMessage(msg))
{
System.out.println(msg);
}
}
Ce que j'aime à propos de cette question est "je suis contraint de return boolean seulement. L'Exception ne peut pas être levée." Sont-ils aussi vous dire que toutes les boucles for doit être fait que lors de la boucle? Pourquoi s'ennuyer à l'aide de Java si vous n'êtes pas autorisé à utiliser Java. Bonne chance.
Pouvez-vous préciser ce que vous avez besoin? Vous écrivez "je suis contraint de return boolean" mais votre méthode de déclaration se lit "public static void DoStuff()"
C'est un développeur qui a refusé d'utiliser les exceptions ou toutes les idiomes de la langue moderne. @Bevan C'est la méthode GetMessage que nécessaire pour retourner un booléen. Pas tellement DoStuff. Mes excuses pour la confusion.
Pouvez-vous préciser ce que vous avez besoin? Vous écrivez "je suis contraint de return boolean" mais votre méthode de déclaration se lit "public static void DoStuff()"
C'est un développeur qui a refusé d'utiliser les exceptions ou toutes les idiomes de la langue moderne. @Bevan C'est la méthode GetMessage que nécessaire pour retourner un booléen. Pas tellement DoStuff. Mes excuses pour la confusion.
OriginalL'auteur tgeros | 2008-12-05
Vous devez vous connecter pour publier un commentaire.
Utiliser java.lang.StringBuilder - essentiellement une mutable Chaîne. Cependant, il serait plus sûr et plus "Java style" pour retourner à la Chaîne modifiée.
OriginalL'auteur Michael Borgwardt
Je vous suggère fortement de ne pas utiliser StringBuilder, le titulaire ou similaire. Ils sont des hacks. Vous souhaitez travailler avec des Chaînes de caractères, et non des bâtisseurs.
Le plus évident de l'approche retourne un objet contenant les données que vous souhaitez retourner. David [bombe.livejournal.com's] solution couvre, donc je ne vais pas la répéter. Cependant, je dirais plutôt que d'essayer de le rendre générique boule de données, soyez précis. Faire comme un objet, peut-être qu'il pourrait même atteindre comportement réel. (Et si vous voulez vraiment aller à la ville, de masquer le constructeur et lui donner un statique de la méthode de création de la place.)
Une deuxième approche, n'est pas si bien pris en charge en Java, est d'inverser les appels. Au lieu de retourner un résultat, dire à un rappel du résultat.
L' (plus important) l'utilisation de code pourrait être quelque chose comme (il semble un peu bizarre, parce qu'il n'est pas spécifique, il n'est ni générique):
La mise en œuvre va quelque chose comme:
Une troisième approche est tout simplement de casser la méthode en deux. Qui peut ou peut ne pas être faisable.
OriginalL'auteur Tom Hawtin - tackline
Tout d'abord je n'aurais probablement pas à ces exigences. Je suis sûr qu'ils peuvent être contournées. Si vous ne voulez pas le faire, je vous recommande de retourner un objet conteneur pour vos deux résultats:
Et dans votre code principal:
GetMessage()
serait évidemment de créer une nouvelle instance d'unResultContainer
et de le retourner rempli avec les valeurs de retour.(À l'aide de médicaments Génériques pour le
ResultContainer
est laissé comme exercice pour le lecteur.)OriginalL'auteur Bombe
Un plus élégant titulaire de classe pourraient être réutilisés pour tout type d'objet en utilisant les génériques:
DoStuff( )
pourrait alors ressembler à ceci:et
GetMessage( )
il faudrait appelerholder.set( a_string)
.OriginalL'auteur J. A. Faucett
De Java une classe à base de langage orienté objet, de sorte que ses idiomes ont tendance à créer des classes pour encapsuler les données avec le comportement qui l'entoure.
Vous avez un datum - le message - qui est obtenu d'une certaine manière, alors si une certaine condition est remplie, autre chose est de faire avec elle. Faire que le comportement d'une séquence de chauffe, ifs et autres opérations de contrôle externe de l'objet est souvent un signe que le programmeur n'a pas compris la programmation orientée objet.
Puis-je suggérer que vous devriez être à l'aide de Fortran ou C plutôt que de Java? Les langages procéduraux ont souvent l'idiome de mutation et de retour d'un drapeau, qui est bien adapté à ce paradigme (en l'absence d'une gestion automatique de la mémoire, l'appelant crée et passe dans une mémoire tampon qui est rempli, ce qui permet de la mémoire tampon pour être libérés en toute sécurité lorsque l'appelant est fait avec elle; Java n'a pas besoin de le faire, donc si vous cherchez à dire Carte.get() retourne une Chaîne de caractères ou null si elle ne parvient pas - pas besoin de gérer la mémoire de l'appelant). Au moins, ne vous embêtez pas à essayer de trouver la façon de le faire dans idiomatiques Java - avec ces contraintes, il ne sera pas, et celui qui est en forçant sur vous a fait un mauvais choix, ce qui signifie que vous pouvez soit avoir des hacks, ou jusqu'à la fin avec verbose code d'essayer de faire un non-hacky solution.
OriginalL'auteur Pete Kirkham
Vous ne pouvez pas utiliser une chaîne de caractères comme paramètre de sortie. La façon de le faire serait d'utiliser une classe StringBuilder au lieu de retourner la valeur null pour un échec.
La Discussion Ici
OriginalL'auteur JamesSugrue
Les chaînes sont immuables, alors oui, vous aurez besoin de mettre la Chaîne dans un StringHolder. Vous pouvez écrire votre propre simplement comme
OriginalL'auteur Paul Tomblin
Trivial StringHolder serait une Chaîne[1].
StringBuilder est probablement la manière canonique de le faire, cependant.
OriginalL'auteur Stobor
Que c'est une exigence de l'étrange.
Pourquoi ne pas faire de la bonne façon ( ou au moins la java façon ) ? C'est comme essayer d'obtenir deux résultats à partir d'une fonction. Comme la soustraction( 2 , 2 ) renvoie 0 et "bonjour monsieur".
Bien de toute façon, vous pouvez essayer ces deux options.
1er. StringBuilder Pas la meilleure chose à utiliser car vous n'êtes pas "construire" une Chaîne de caractères.
2e StringHolder ( tout ce qui est porteur d'ailleurs ) de ne Pas trop java style non plus, mais faire le travail. Ce serait celui utilisé par la plupart des développeur java, je le sais.
3ème. Option. pas ce que vous avez demandé, mais ce que je voudrais faire. Malheureusement viole le "return boolean" état.
En choisir un.
Note
Bien que pas tout le monde aime cette ( Jon Skeet dirais "n'Est pas universellement acceptée" ) , veuillez jeter un oeil à la java style d'écriture que j'utilise ( méthodes en commençant par les minuscules et les accolades dans la même ligne ). Parfois, il est important de respecter la plate-forme de codage dans. Au moins, c'est ce que je fais quand je code en C# ( très rarement d'ailleurs )
Je n'ai jamais prétendu que le désignation conventions ne sont pas à peu près universellement acceptée. Seulement le contreventement de style. C'est parce qu'il n'a pas d'importance comment le Soleil accolades leur code - incompatibilité entre mon code et eux ne sont pas dans mon code. Ces noms n', parce que j'utilise du Soleil des cours au sein de mon code.
OriginalL'auteur OscarRyz
public boolean doStuff(String msg)
{
boolean boolTest = false;
msg += "Appending something to msg";
int msgLength = msg.length();
if ( msgLength > 80 )
{
boolTest = true;
return boolTest;
}
return boolTest;
}
Est ce genre de ce que vous recherchez? Je suis en supposant que la boolean test est quelque chose comme test si le message est trop long pour l'affichage (plus de 80 longueur) ou quelque chose de semblable, et que vous n'avez pas besoin d'appeler une autre méthode pour modifier la chaîne de message à l'intérieur de doStuff().
Pourrais être complètement hors ici, mais. 🙂
OriginalL'auteur
premier u écrire teh programmes et de les rendre dans le code comme ceci:
Astuce pour vous : le temps d'Exécution.exec doit être utilisé partout. Ensuite, vous pouvez faire de nombreux programmes.
Alors u attendre pour obtenir en retour un code d'état comme ceci:
De cette façon, vous pouvez utiliser le programme comme quoi à côté de ce programme. Il est bon de faire le code resusable. Prendre de moi, j'ai été à elle pendant des années. C'est comment les pros de rendre le code.
OriginalL'auteur