[英]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.