2016-05-22 1 views
-6

J'essaie d'invoquer ma méthode m1(int), mais j'obtiens une erreur lorsque j'essaie d'utiliser une chaîne comme entrée.foo (int) n'est pas applicable pour les arguments (String)

Quelle est la raison?

class TestSuper 
{ 

    public void m1(int i) 
    { 
     System.out.println("int-arg"); 
    } 
    public void m1(float f) 
    { 
     System.out.println("float-arg"); 
    } 

    public static void main(String[] args){ 
     TestSuper t = new TestSuper(); 
     t.m1(10.5f); 
     t.m1(10); 
     t.m1("Name"); // <- Where I get the error. 
    } 

} 
+0

Parce qu'un 'String' n'est pas un' float' ** ou ** un 'int'. –

+0

Mais il faut donc char ... – fool

+1

Un 'String' n'est pas un' char'; mais un 'char' est un type intégral (et peut être * élargi * à un' int'). –

Répondre

1

Pour commencer, vous essayez de jeter entre un objet, String, et une primitive, int. Cela ne fonctionnera tout simplement pas. Les objets ne peuvent pas être convertis en primitives, et vice-versa. Un String comprend un tableau de char enveloppé dans un objet.
Un int comprend un seul nombre décimal signé.

Lorsque vous essayez d'exécuter une méthode qui nécessite une int avec un String, vous n'êtes pas fournirez avec un numéro, vous fournissez avec un char, qui doit ensuite être jeté à un int. En outre, la façon dont vous avez configuré la surcharge, il n'y a aucun moyen de différencier entre la météo ou non, vous utilisez la méthode m1(int) ou m1(float) méthode. Pour résoudre ce problème, vous devez ajouter la méthode suivante:

public void m1(String s) { 
    System.out.println("String-arg"); 
} 

Pour l'avenir, de jeter entre un String et int, utilisez:

int i = Integer.parseInt("44"); // Equal to 44. 

qui court alors le risque de redonner un NumberFormatException, pour être sûr:

public void randomMethod(String input) { 
    int i = 0; 
    try { 
     i = Integer.parseInt(input); 
    } catch (NumberFormatException e) {} // Fill in with your requirements. 
}