Java 泛型和数字

2024-04-27

为了看看我是否可以清理一些数学代码(主要是矩阵代码),我尝试使用一些 Java 泛型。我有以下方法:

private <T> T[][] zeroMatrix(int row, int col) {
    T[][] retVal = (T[][])new Object[row][col];
    for(int i = row; i < row; i++) {
        for(int j = col; j < col; j++) {
            retVal[i][j] = 0;
        }
    }
    return retVal;
}

retVal[i][j] = 0 这一行让我头疼。该行的目标是用 T 表示形式 0 初始化数组。我尝试用它做各种事情:(T 在类中定义为 T extends Number)

retVal[i][j] = (T)0;
retVal[i][j] = new T(0);

唯一有效的是

retVal[i][j] = (T)new Object(0);

这不是我想要的。

这可能吗?有没有更简单的方法来表示任何类型的 Number(包括可能的 BigDecimal)的 NxM 矩阵,还是我被困住了?


<T extends Number> T[][] zeroMatrix(Class<? extends Number> of, int row, int col) {
    T[][] matrix = (T[][]) java.lang.reflect.Array.newInstance(of, row, col);
    T zero = (T) of.getConstructor(String.class).newInstance("0");
    // not handling exception      

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; 
            matrix[i][j] = zero;
        }
    }

    return matrix;
}

usage:

    BigInteger[][] bigIntegerMatrix = zeroMatrix(BigInteger.class, 3, 3);
    Integer[][] integerMatrix = zeroMatrix(Integer.class, 3, 3);
    Float[][] floatMatrix = zeroMatrix(Float.class, 3, 3);
    String[][] error = zeroMatrix(String.class, 3, 3); // <--- compile time error
    System.out.println(Arrays.deepToString(bigIntegerMatrix));
    System.out.println(Arrays.deepToString(integerMatrix));
    System.out.println(Arrays.deepToString(floatMatrix));

EDIT

通用矩阵:

public static <T> T[][] fillMatrix(Object fill, int row, int col) {
    T[][] matrix = (T[][]) Array.newInstance(fill.getClass(), row, col);

    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            matrix[i][j] = (T) fill;
        }
    }

    return matrix;
}    

Integer[][] zeroMatrix = fillMatrix(0, 3, 3); // a zero-filled 3x3 matrix
String[][] stringMatrix = fillMatrix("B", 2, 2); // a B-filled 2x2 matrix
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 泛型和数字 的相关文章

随机推荐

  • 使用 Go 解组嵌套 xml

    我有以下代码片段 我一直在努力让它工作 我到处寻找解决方案 但我找到的解决方案似乎都不起作用 我的映射似乎有问题xml Unmarshal命令 因为它涉及嵌套字段 下面的代码用于检索第一个被称为的值unit 并且位于 xml 代码的顶层 另
  • WPF 进度条动画速度

    我注意到 WPF 进度栏和 WinForms 进度栏完全填满所需的时间存在差异 完全填充 就像在 Form 和 WPF 中将值设置为 100 一样 我们可以注意到 WinForms 平滑地填充栏 而 WPF 立即填充它 我想知道是否有一个属
  • 如何摆脱“Google 地图方向服务”标记?

    谷歌地图Direction ServiceApi有两个 副作用 1 它添加了Markers自动到达出发地和目的地 2 它增加了两个InfoWindow到新的Markers 包含他们的地址 知道如何摆脱这些标记及其信息气泡吗 添加suppre
  • QSpinBox 具有用于十六进制输入的 Unsigned Int

    这里写了很多关于 QSpinBox 使用 int 作为其数据类型的限制的问题 人们通常希望显示更大的数字 就我而言 我希望能够以十六进制显示无符号 32 位整数 这意味着我希望我的范围为 0x0 0xFFFFFFFF 正常的 QSpinBo
  • 如何使用 Dapper 将字符串作为 NULL 发送到 SQLServer?

    我有一个场景 C 中的字符串可以是null 我需要它是NULL在 SQL Server 上 我使用 Dapper 将其发送到 SQLServer 查询如下 connection Query
  • 面向 Clojure 用户的 Java

    我一直在断断续续地使用 Lisp 并且正在赶上 clojure clojure的好处是我可以自然地使用所有的java函数 而clojure的坏处也是我必须自然地了解java函数 例如 我不得不花一些时间 谷歌搜索 来查找 Java 中的平方
  • 如何在 AngularJS 中插入命令或阻止 $http 的 JSONP 自动解析?

    似乎我发现的关于 http 或 angularjs 的几乎每个问题或解释通常都假设您可以修改请求的响应 我不能这样做 而且我得到的响应格式错误 根据 AngularJS 解析器 它的格式错误一致 因此我可以在解析纯文本之前修改它来解决问题
  • 当我传递 NULL 值时,COALESCE 函数不起作用,但当将变量声明为 NULL 时它起作用

    当我执行以下查询时 我得到输出 但是当我通过NULL参数 它不起作用 示例1 DECLARE a int NULL b int NULL c int NULL SELECT COALESCE a b c GO 输出 空 示例2 SELECT
  • 如何使用 jasper 从 jsp 生成 pdf 格式的报告

    在我的应用程序中 我可以连接到数据库并获取数组结果集 并使用 JSP 代码迭代该数组并使用 HTML 在网页中显示报告 我希望 HTML 网页中生成的报告可以以 PDF 格式导出并保存在某个 pdf 文件中 请告诉我如何实现这样的技术来实现
  • 雪豹中的 OpenVRML(来自 macports)

    嘿 我刚刚从 macports 下载了 openvrml 端口安装openvrml 现在我有一个示例程序 来自 sourceforge 的 openvrml 的 pretty print cpp 其开头如下 ifdef HAVE CONFI
  • 如何序列化其类相互引用的类层次结构,但避免 XmlInclude?

    我有一个类的层次结构 我想使用XmlSerializer类及其相关属性 有一个基本抽象类 然后是相当多的派生类 在下面的代码中 我已将派生类的数量减少到五个 但实际代码中还有更多 这些类形成一个层次结构 并且经常包含对层次结构中类的实例的引
  • 如何从 iPhone/iPad 删除应用程序及其设置

    我正在 iPhone iPad 上测试应用程序安装 但我只能执行一次 因为 iOS 会记住设置 例如允许访问照片等 并且在我卸载应用程序时永远不会清除它们 因此 下次我安装它时 它不会要求允许访问照片等 除了重置设备之外 还有什么方法可以完
  • 给定一个范围列表,我们如何找到给定值是否存在于 Node js 的该范围列表中

    我有一组 ip 范围 我需要查找用户给出的 ip 是否存在于给定的 ip 范围列表之间 这是这个问题的延续 如何使用node js检查给定的ip是否在给定的ip范围内 https stackoverflow com questions 46
  • 在 Silverlight 中编辑并继续?

    Edit And Continue 是我最喜欢的调试工具之一 我之前曾在基于 C 的 Winforms 和 ASP NET 项目中使用过它 但是 我在 VS 2008 上运行 Silverlight 3 0 应用程序 每当我尝试进行更改 中
  • 为什么需要修改 JSP 中的 buffer 和 autoflush 属性?

    我不明白为什么需要修改JSP中的buffer和autoflush属性 它们是做什么的 如果我不修改它们会发生什么 JSP 页面生成的任何内容都存储在缓冲区中 当缓冲区已满时 它会被发送回客户端 浏览器 当缓冲区刷新一次时 重定向或转发将不起
  • 具有自定义格式的 ASP.NET MVC ViewModel 映射

    我正在从事的项目在域模型中有大量货币属性 我需要将它们格式化为 用于向视图传输和从视图传输 我对可以使用的不同方法有一个想法 一种方法可能是在视图内显式设置值的格式 如下所示Steve Michelotti 的 模式 1 https web
  • 在具有重载构造函数的类中传递 null 时,首先调用哪个构造函数?

    下面是具有 3 个重载构造函数的 java 类 public class Test public Test Object i System out println Object invoked public Test String i Sy
  • 如何在 C# winforms 中翻译文本

    我需要翻译一些文本 我正在尝试使用谷歌翻译器来翻译它 我检查了这个article http martinnormark com translate text in c using google translate 但我在以下代码中遇到异常
  • 插入到 wordpress 数据库 - 调用成员函数 insert()

    我在通过我的插件将数据插入 WordPress 数据库时遇到问题 我的插件使用短代码来显示一个表单 从中进行一些计算 然后该信息应该被插入到数据库中 但我最终收到了此消息 我似乎无法让它工作 任何帮助将不胜感激 用于插入的插件代码 incl
  • Java 泛型和数字

    为了看看我是否可以清理一些数学代码 主要是矩阵代码 我尝试使用一些 Java 泛型 我有以下方法 private