簡體   English   中英

無法將通用數組直接分配給局部變量

[英]Cannot assign generic array directly to local variable

考慮以下代碼:

final public class Array<T> implements Iterable<T> {
    private T[] array;
    private int l;
    private int h;
    public Array(int L, int H) {
        @SuppressWarnings("unchecked")
        this.array =  (T[]) (new Object[H- L+1]);
        this.l = L;
        this.h = H;
    }
}

無法在我的計算機上編譯,並出現以下錯誤:

Array.java:21: error: illegal start of type
        this.array =  (T[]) (new Object[H- L+1]);
        ^
Array.java:21: error: ';' expected
        this.array =  (T[]) (new Object[H- L+1]);
            ^
2 errors

VSCode中可用的語法檢查器/襯里甚至抱怨以下內容:

[Java] Syntax error, insert "enum Identifier" to complete EnumHeaderName
[Java] Syntax error, insert "EnumBody" to complete BlockStatements

@SupressWarnings語句之后。

但是,當我將構造函數更改為此:

final public class Array<T> implements Iterable<T> {
    private T[] array;
    private int l;
    private int h;
    public Array(int L, int H) {
        @SuppressWarnings("unchecked")
        final a = (T[]) (new Object[H- L+1]);
        this.array =  a;
        this.l = L;
        this.h = H;
    }
}

它按預期工作。


我的問題是:

我不能將通用數組直接分配給我的本地字段是什么? 這是編譯器錯誤嗎?

我在最新的Arch Linux安裝上使用以下Java版本。

$ java -showversion
openjdk version "1.8.0_172"
OpenJDK Runtime Environment (build 1.8.0_172-b11)
OpenJDK 64-Bit Server VM (build 25.172-b11, mixed mode)

語句@SuppressWarnings("unchecked")放錯了位置。 像這樣將其移到構造函數上方:

@SuppressWarnings("unchecked")
public Array(int L, int H) {
    this.array =  (T[]) (new Object[H- L+1]);
    this.l = L;
    this.h = H;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM