当前位置: 首页 > 知识库问答 >
问题:

类构造函数不区分args...和args[][][重复]

太叔超英
2023-03-14

我目前正在使用java编写线性代数库,灵感来自我的线性代数I

我希望我的程序尽可能灵活,因此决定我的矩阵类将有许多可用的构造函数。然而,当我试图将这两个构造函数结合在一起时,Java抛出了一个编译错误:

public Matrix(double[]... rows) { ... }

public Matrix(double[][] matrix) { ... }

我不明白为什么,因为第一个构造函数将接受任意数量的双[]数组作为args:矩阵矩阵=新矩阵(r1,r2,r3... etc)而第二个构造函数将只接收一个双[][]arg:矩阵矩阵=新矩阵(arr)。我意识到在两个构造函数中,我将处理相同的数据结构(双的2D数组),但这里没有关于输入类型的歧义,这就是为什么这对我来说很奇怪。

共有2个答案

丌官星渊
2023-03-14

对于JVM来说,varargs(..)和数组([])之间没有区别,它在运行时看到的只是一个数组。

另见https://stackoverflow.com/a/7951397/7468990

贡威
2023-03-14

<代码>类型相当于类型[](至少就方法参数声明和方法实现而言)。在这个意义上,类型[]相当于类型[][],这解释了双[]被视为双[][],即它被视为相同的签名。

 类似资料:
  • 问题内容: 之间有什么区别: 和 我不相信,但是我想知道。 问题答案: 从语义上讲,它们是相同的。但是,我建议在声明数组时使用后一种语法()。以前的语法主要用于与C语法兼容。 因为总体上来说,它是Java中对象的类型,所以它更加一致,而且很清楚不要将其拆分。

  • 为了实现带有附加元信息的文件上载endpoint,我编写了以下: 指定为: 和一个快乐小路测试: 运行测试(时,它失败,endpoint返回而不是。读取日志显示请求参数为: 我部分理解为什么它是。有了这些部分知识,我可以通过使中的字段可变来规避这个问题: “修复”问题的代码可以在Bitbucket,branch上找到。 但是,这使得变了,我想防止这种情况发生。为了进一步研究,我展开了上的lombo

  • 类名: Imi\Util\Args 命令行参数操作类 方法 get 获取值 // 不妨运行加一个 -abc 123 参数看看效果 var_dump(Args::get('abc')); // 支持默认值 var_dump(Args::get('abc', 'default')); set 写入参数值 var_dump(Args::set('abc', 'value')); exists 指定

  • 在我看来,使用spring-boot-data-jdbc的实体上的所有查询方法都需要一个无参数的构造函数?有原因吗?这里有一个简单的例子给出了这个例外。使用H2数据库 原因:org.SpringFramework.Beans.BeanInstantiationException:无法实例化[Com.Example.RelationalDataAccess.Person]:未找到默认构造函数;嵌套异

  • 问题内容: 我有一个简单的问题。我曾尝试在许多博客中搜索有关此问题的信息,但所有站点都返回了如何快速运行功能,但我需要这种情况。 我的自定义函数是: 如何通过args将args传递给其他系统函数? 谢谢前进。 问题答案: 与(Objective-)C中类似,您不能将变量参数列表直接传递给另一个函数。您必须创建一个 (与C语言中的Swift等效)并调用一个带有参数的函数。 所以这可能是您要寻找的:

  • 问题内容: 我目前正在以指导学生编程的方式教学生。我告诉他们,他们可以在Oracle代码约定中找到大多数约定。 在我的上一教程中,一个学生问: 要么 是按惯例写的还是有区别的。我以前从未看过第一个版本,因此,我非常确定第二个版本是一个约定。但是我没有消息来源。 您能给我一个明确说明惯例中的哪一个的来源(最好是来自oracle,例如我上面链接的页面)吗? 两个表达式的等价 我知道这两个表达式是等效的