2016-05-22 23 views
-6

私のメソッドm1(int)を呼び出そうとしていますが、文字列を入力として使用しようとするとエラーが発生します。foo(int)は引数(String)には適用されません

その理由は何ですか?手始めに

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

'String'は' float' **または** an'int'ではないためです。 –

+0

しかし、それはcharを取ります。 – fool

+1

'String'は' char'ではありません。 'char'は整数型です(int型に拡張することもできます)。 –

答えて

1

、あなたがオブジェクト、String、およびプリミティブ、intの間にキャストしようとしています。これは単に機能しません。オブジェクトをプリミティブにキャストすることはできず、その逆もありません。

Stringは、charの配列をオブジェクトにラップします。
intは、単一の符号付き10進数で構成されています。あなたはStringintを必要とするメソッドを実行しようとすると

、あなたはその後、intにキャストする必要がありchar、とそれを供給している、番号とそれに供給されていません。

さらに、設定オーバーロードの方法では、m1(int)メソッドまたはm1(float)メソッドを使用している天気を区別する方法がありません。 、その後、NumberFormatExceptionをバック与える危険を冒す

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

:使用、Stringintの間でキャストし、将来のために

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

:この問題を解決するには、次のメソッドを追加する必要があります安全であるように:

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