我想接受整数的方法,并且双打。 Number类可以用作参数,以便所有数字都可以被接受为参数。 (我怀疑它可能适用,但只能为整数,而不是整数)Number类可以用作参数来接受所有类型的数字作为参数吗?
-1
A
回答
4
是的,自动装箱工作转换int
到Number
一样好,从int
到Integer
:
public class Test {
public static void main(String[] args) throws Exception {
foo(10);
foo(10.5);
foo(10.5f);
foo(java.math.BigInteger.ONE);
}
static void foo(Number number) {
System.out.println(number + " " + number.getClass());
}
}
或者更确切地说,拳击本身只能从int
转换为Integer
,但随后扩展参考转换将从Integer
转换为Number
。从JLS 5.3:
调用上下文允许的方法或构造函数调用的自变量值(§8.8.7.1,§15.9,§15.12)将被分配给一个对应的形参。
严格调用上下文允许使用以下中的一种:
- 的标识转换(§5.1.1)
- 加宽原语转换(§5.1.2)
- 扩展引用转换(§5.1.5)
松散的调用上下文允许更宽松的转换集,因为它们仅用于特定的调用,如果没有找到适用的声明使用严格的调用上下文。松散调用上下文允许使用以下中的一种:
- 的标识转换(§5.1.1)
- 加宽原语转换(§5.1.2)
- 加宽引用转换(§5.1 0.5)
- 装箱转换(§5.1.7)任选地随后通过加宽引用转换
- 取消装箱转换(§5.1.8)任选地随后进行加宽原语转换
在这种情况下,使用松散调用上下文(对于foo
的前三个调用),因为使用严格调用上下文无法找到方法声明。
+0
使用Number作为便利参数是否存在重大风险或缺点?如果一个方法需要3个数字,而不是多次重载它来覆盖所有可能的基元组合,我感觉它让我的生活变得轻松多了。 – NikkyD 2016-04-27 12:25:13
相关问题
- 1. 爪哇 - 接受Map作为参数类
- 2. Ruby方法可以接受二维数组作为参数吗?
- 3. varargs参数作为类型参数?
- 4. 何时应该接受类类型作为参数?
- 5. 我们可以使用MemberFunction类型作为模板参数吗?
- 6. 接受嵌套可变参数类模板作为函数模板的参数
- 7. 使用嵌套类型参数作为顶层类型参数
- 8. C++:使用类类型作为参数
- 9. 可以将类引用作为参数发送给函数吗?
- 10. 使用“T”与“Object”作为方法参数来接受参数?
- 11. 参数类型或返回类型作为参数?
- 12. 可为空类型作为通用参数吗?
- 13. '公共函数'没有类型参数,所以不能有类型参数。 VB.NET
- 14. 类作为参数
- 15. Scala类型参数在作为基类的参数使用时可以引用它自己吗?
- 16. 类型与类作为虚拟参数
- 17. C#类类型作为方法参数
- 18. Scala传递类类型作为参数
- 19. 传类类型作为参数
- 20. POSTGRES:函数接受一个hashmap或类似的参数作为参数
- 21. 作为参数的泛型类型
- 22. Blackberry Java可以参数化类型吗?
- 23. 在函数中是否可以将类型作为参数?
- 24. WCF工作流服务可以将工作流类型作为参数吗?
- 25. 使用扩展参数的类型传递作为泛型类型参数
- 26. 可以用params来调用强类型参数的方法吗?
- 27. nvl可以返回不同的数据类型作为它的参数吗?
- 28. 为什么C++构造函数接受不正确的类型作为参数?
- 29. 函数可以接受静态函数指针作为参数吗?
- 30. 带有类型作为键的字典中派生类型参数的函数
明显的问题:你有没有试过?我相信答案是肯定的,但是要测试这个问题比输入问题少得多。 – 2015-02-07 08:36:18
是的,你可以。你为什么不自己尝试一下,而不是在这里问。 – SMA 2015-02-07 08:36:53