foo(int) 不适用于参数(字符串)

Posted

技术标签:

【中文标题】foo(int) 不适用于参数(字符串)【英文标题】:foo(int) is not applicable for the arguments (String) 【发布时间】:2016-09-19 03:36:21 【问题描述】:

我正在尝试调用我的方法 m1(int),但是当我尝试使用字符串作为输入时出现错误。

背后的原因是什么?

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.
    


【问题讨论】:

因为String 不是float int 但它需要 char 所以... String 不是char;但是char 是一个整数类型(并且可以加宽int)。 喜欢 t.m1('A') 通过重载概念 创建另一个重载方法:public void m1(String s) System.out.println("String-arg"); 【参考方案1】:

首先,您尝试在对象String 和原语int 之间进行转换。这根本行不通。对象不能转换为基元,反之亦然。

一个String,由一个包裹在一个对象中的char数组组成。int,由一个带符号的十进制数组成。

当您尝试运行一个需要intString 的方法时,您不是为它提供一个数字,而是为它提供一个char,然后必须将其转换为@ 987654329@.

此外,您设置过载的方式,没有办法区分天气,您使用的是m1(int) 方法还是m1(float) 方法。要解决此问题,您应该添加以下方法:

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

对于将来,要在 Stringint 之间进行转换,请使用:

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

然后冒着回馈NumberFormatException的风险,为了安全起见:

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

【讨论】:

以上是关于foo(int) 不适用于参数(字符串)的主要内容,如果未能解决你的问题,请参考以下文章

作为映射键的字符串枚举不适用于 ReturnType

.htaccess 内部重定向不适用于字符串参数

查询字符串参数不适用于我的 wordpress 项目

为啥空声明适用于带有 int 参数的定义,但不适用于 float 参数?

类型 Calendar 中的方法 set(int, int) 不适用于参数 (int, String)

FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)