【问题标题】:Combining Java Functions without Overloading在不重载的情况下组合 Java 函数
【发布时间】:2016-04-04 18:37:23
【问题描述】:

如何结合这两个函数来提高我的代码效率?我目前只是重载函数以允许接受整数和字符串作为参数。

private void flushGrid(int grid[][], int replacement) {
        for(int x=0;x<grid.length;x++) {
            for(int y=0;y<grid[0].length;y++) {
                grid[x][y] = replacement;
            }
        }
    }

private void flushGrid(String grid[][], String replacement) {
    for(int x=0;x<grid.length;x++) {
        for(int y=0;y<grid[0].length;y++) {
           grid[x][y] = replacement;
        }
    }
}

【问题讨论】:

  • 你不能,真的。

标签: java function overloading


【解决方案1】:

结合这两种方法不会使其更简单或更高效,但您可以做到。

private void flushGrid(Object[] grid, Object replacement) {
    for (int x = 0; x < grid.length; x++) {
        for (int y = 0; y < Array.getLength(grid[0]); y++) {
            Array.set(grid[x], y, replacement);
        }
    }
}

请注意,这适用于原始数组和引用数组。

【讨论】:

  • 你可能是想写Object[][] grid?还是(Object[]) grid[0].length?甚至(Object[]) grid[x].length
  • @radoh 我应该改变它。如果它是原始数组,则不能将其转换为 Object[]
  • 哦,好的,很好,不知道Array.* 方法:)
  • @radoh 添加Arrays 方法:P
  • 是的,我知道这些 ;)
【解决方案2】:

您可以使您的方法在类型T 上通用。类似的,

private <T> void flushGrid(T grid[][], T replacement) {
    for (int x = 0; x < grid.length; x++) {
        for (int y = 0; y < grid[0].length; y++) {
            grid[x][y] = replacement;
        }
    }
}

适用于StringInteger 或任何其他引用类型(但不适用于intlongdouble 等原始类型)。

【讨论】:

  • 原语不支持泛型,至少在 Java 10 之前不支持。
  • 这是否意味着该类必须是泛型的?
  • @Xoce웃Пepeúpa 不,您可以在不使类通用的情况下使方法通用。
  • 这不适用于T == int,如第一个示例所示。它只能作为第二个示例的替代品,后者更好但不会简化任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多