自动转换为双倍参数
Automatic cast to double in parameter
为什么Java施法点数自动加倍?当我施放它时,它起作用了。但这在我看来并不是什么美好的方式。
我的方法可以更改为双重签名。但是当我导入一些东西时,我找不到解决方案。
public class Demo {
public static void main(String[] args) {
run(0.1);
run(1*0.1);
run(1);
importedClass.setPosition(0.1, 3.5);
//setPosition(float, float) not applicable for the arguments (double, double)
run((float) 0.1);
run((float) 1*0.1);
run(1);
importedClass.setPosition((float) 0.1, (float) 3.5);
}
public static void run(float x) {
//do something
}
}
抛出未解决的编译问题:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The method run(float) in the type Demo is not applicable for the arguments (double)
The method run(float) in the type Demo is not applicable for the arguments (double)
at test.Demo.main(Demo.java:6)
发生这种情况是因为当没有为十进制数指定后缀 'f' 或 'd' 时,java 会自动将其默认为双精度数。
因此,
运行(0.1);
变成:
运行(0.1d);
定义在Java Language Specification:
A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d
因此,您可以通过使用后缀
让编译器清楚地知道您实际上使用的是 float
类型的文字,而不是强制转换
run(0.1f);
为什么Java施法点数自动加倍?当我施放它时,它起作用了。但这在我看来并不是什么美好的方式。
我的方法可以更改为双重签名。但是当我导入一些东西时,我找不到解决方案。
public class Demo {
public static void main(String[] args) {
run(0.1);
run(1*0.1);
run(1);
importedClass.setPosition(0.1, 3.5);
//setPosition(float, float) not applicable for the arguments (double, double)
run((float) 0.1);
run((float) 1*0.1);
run(1);
importedClass.setPosition((float) 0.1, (float) 3.5);
}
public static void run(float x) {
//do something
}
}
抛出未解决的编译问题:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The method run(float) in the type Demo is not applicable for the arguments (double)
The method run(float) in the type Demo is not applicable for the arguments (double)
at test.Demo.main(Demo.java:6)
发生这种情况是因为当没有为十进制数指定后缀 'f' 或 'd' 时,java 会自动将其默认为双精度数。
因此, 运行(0.1);
变成: 运行(0.1d);
定义在Java Language Specification:
A floating-point literal is of type float if it is suffixed with an ASCII letter F or f; otherwise its type is double and it can optionally be suffixed with an ASCII letter D or d
因此,您可以通过使用后缀
让编译器清楚地知道您实际上使用的是float
类型的文字,而不是强制转换
run(0.1f);