【问题标题】:foo(int) is not applicable for the arguments (String)foo(int) 不适用于参数(字符串)
【发布时间】: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"); }

标签: java string arguments overloading


【解决方案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.
}

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    相关资源
    最近更新 更多