首页 > 解决方案 > 为什么会出现“插入“SimpleName”以完成 ClassType”?

问题描述

当我调用第二个初始化方法时出现问题,但不是第一个。

我已经找了 30 分钟,找不到任何东西来修复这个错误。

final public class Matrix{
    private final int M, N;//rows and columns
    public final double[][] data;
    public Matrix(int M, int N) {
        this.M = M;
        this.N = N;
        data = new double[M][N];
    }
    public Matrix(double[][] data) {
        M = data.length;
        N = data[0].length;
        this.data = new double[M][N];
        for(int i = 0; i < this.M; i++) {
            for(int j = 0; j < this.N; j++) {
                this.data[i][j] = data[i][j];
            }
        }
    }
    private Matrix(Matrix A) {this(A.data); } // copy matrix
}
private Matrix m1;
m1 = new @Matrix({{1.0,2.0},{1.0,2.0}});
double[][] d;
d = new double[m1.data.length][m1.data[0].length];
for(int i = 0; i < m1.data.length; i++) {
    for(int j = 0; j < m1.data[0].length; j++) {
        d[i][j] = m1.data[i][j];
    }
}
System.out.println(Arrays.deepToString(d));

它应该将矩阵打印为数组,但错误:

Syntax error, insert "SimpleName" to complete ClassType
Syntax error, insert "( )" to complete Expression

出现

标签: java

解决方案


一方面,

m1 = new @Matrix({{1.0,2.0},{1.0,2.0}});

应该:

m1 = new Matrix(new double[][]{{1.0,2.0},{1.0,2.0}});

这个地方可能是导致您看到您所看到的堆栈跟踪的原因,因为(在此处ClassType定义)的格式可以由注释引导。注释(在此处定义)可能由符号引导,所以我认为这就是编译器所抱怨的 - 启动 ClassType 但没有正确完成它。为了另一个,@

final public class Matrix{

应该可能(对于正确性来说不是必需的,但在风格上是一致的)是:

public final class Matrix{

确保

private Matrix m1;

被声明为一个字段。如果它是局部变量,请将private修饰符带走。

进行这些更改后,我得到输出:

> java Main
[[1.0, 2.0], [1.0, 2.0]]

你可以在这里查看我的测试代码。


推荐阅读