现在我有这个类(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/