关于java 可变参数的问题,The method max(int[]) is ambiguous for the type test

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java 可变参数的问题,The method max(int[]) is ambiguous for the type test相关的知识,希望对你有一定的参考价值。

public class test
public static int max(int... a)

return 0;


public static int max(long... a)

return 0;


public static void main(String[] s)

test.max(1,2);


代码里 max(int... a) 与max(long... a)重载,但调用的时候报
The method max(int[]) is ambiguous for the type test
各位有没有遇到过这种问题

问题不在这.是test.max(1,2);这句造成的.原因是对 max 的引用不明确,test 中的 方法 max(int...) 和 test 中的 方法 max(long...) 都匹配test.max(1,2);
你改成test.max(1L,2);就不会报错了,因为确定是引用的long类型的了.
参考技术A 错误提示是含糊不清,你的
public static int max(long a)
return 0;


方法有问题,声明返回值参数为int型,参数列表里的是long类型,return的也是int型,传参就会出问题。

关于Java可变参数问题?

如图,执行代码后结果有两个,那么为什么printMax两个数组都会一起执行它们下面的代码呢?求解,谢谢大佬!

你好,很高兴回答你的问题。
这就是java可变参数的传参方式,可以直接传一个符合参数数据类型的数组,也可以是用逗号分割的多个符合参数数据类型变量。
如果有帮助到你,请点击采纳。
参考技术A 那是因为:
调用printMax方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。如果传入数组,就不用创建数组,直接处理了。
参考技术B 结果有两个,是因为你调用了两次方法。
你以为他们是一起执行的,但不是,这就是简单的顺序执行,第一次执行输出完了,另一次调用才会执行,可以打断点看看控制台和程序执行流程本回答被提问者和网友采纳
参考技术C 两种形式都可以的,都符合java可变参数的特征,只不过变换形式
其实方法内部也是转换成了数组,具体可以使用eclipse debug查看下
参考技术D 可变参数,编译器会把参数转成一个数组,所以可以直接传递一个数组,也可以按照原来的方式传参

以上是关于关于java 可变参数的问题,The method max(int[]) is ambiguous for the type test的主要内容,如果未能解决你的问题,请参考以下文章

命令行传递参数和可变参数

[问题记录]Java关于可变参数重载问题

java反射机制之Method invoke执行调用方法例子

JAVA中,关于可变参数和泛型的问题。

#yyds干货盘点#关于 Java 的可变参数你真的了解吗?

可变参数递归