java - 填充数组并调用 super

标签 java

现在我有这个类(class):

public final class MyClass<T> {

    public MyClass(Function<Number, Function<Number, T>> func, Number rows, Number cols) {
        final T[][] result = (T[][]) new Object[rows.intValue()][cols.intValue()];
        for (int row = 0; row < rows.intValue(); ++row) {
            for(int col = 0; col < cols.intValue(); ++col) {
                result[row][col] = func.apply(row).apply(col);
            }
        }
        super(result);
    }
}

但请调用super()必须是构造函数主体中的第一个语句。是否可以更改方法的主体以使构造函数有效?

由于泛型的原因,填充数组的静态方法不起作用。

private static Object[][] fillArray(Function<Number, Function<Number, Object>> func, Number rows, Number cols) {
    final Object[][] result = new Object[rows.intValue()][cols.intValue()];
    for (int row = 0; row < rows.intValue(); ++row) {
        for(int col = 0; col < cols.intValue(); ++col) {
            result[row][col] = func.apply(row).apply(col);
        }
    }
    return result;
}

super((T[][])fillArray(func, rows, cols)); - 第一个参数类型错误。已找到F<Number, F<Number, T>> ,必填F<Number, F<Number, Object>> (F - 函数)。

最佳答案

只需将结果代码提取到自己的静态方法中即可:

public final class MyClass<T> {

    public MyClass(Function<Number, Function<Number, T>> func, Number rows, Number cols) {
        super(result(func, rows, cols));
    }

    private static <Z> Z[][] result(Function<Number, Function<Number, Z>> func, Number rows, Number cols) {
        final Z[][] result = (Z[][]) new Object[rows.intValue()][cols.intValue()];
        for (int row = 0; row < rows.intValue(); ++row) {
            for(int col = 0; col < cols.intValue(); ++col) {
                result[row][col] = func.apply(row).apply(col);
            }
        }
        return result;
    }

}

请注意,静态方法本身就是一个泛型方法。为了清楚起见,我使用了另一个类型变量 (Z)。

关于java - 填充数组并调用 super,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138909/

相关文章:

java - 注册后按返回键进入登录界面

java - Android 中的单选按钮启用和禁用

java - 删除jsf spring hibernate primefaces集成中的一行

java - 如何在 Crafter Studio 2.5 中删除权限?

java - 对于java泛型来说<>意味着什么?

java - hibernate 无法重新连接到 mysql 数据库

java - OptaPlanner 中 PDPTW 的最便宜插入?

java - 在 ImageJ 中实现 Sobel 过滤器

java - java.sql.date 的 getter 和 setter

java - 安卓工作室 : E/AndroidLogcatService Error on only one device