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
,由一个带符号的十进制数组成。
当您尝试运行一个需要int
和String
的方法时,您不是为它提供一个数字,而是为它提供一个char
,然后必须将其转换为@ 987654329@.
此外,您设置过载的方式,没有办法区分天气,您使用的是m1(int)
方法还是m1(float)
方法。要解决此问题,您应该添加以下方法:
public void m1(String s)
System.out.println("String-arg");
对于将来,要在 String
和 int
之间进行转换,请使用:
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) 不适用于参数(字符串)的主要内容,如果未能解决你的问题,请参考以下文章
为啥空声明适用于带有 int 参数的定义,但不适用于 float 参数?
类型 Calendar 中的方法 set(int, int) 不适用于参数 (int, String)
FragmentTransaction 类型中的方法 add(int, Fragment) 不适用于参数 (int, WeatherFragment)