gpt4 book ai didi

Java:通用数组创建

转载 作者:行者123 更新时间:2023-12-02 04:37:06 24 4
gpt4 key购买 nike

我正在编写自定义 Map,它具有自定义 Pair 数组,并且 Map 使用该对进行操作。

它们是通用的,我不知道它们的类型它可以是整数、字符串或 double 。所以我不能使用 ArrayList,这对我来说是被禁止的。

public class FMap<K, V> {
private FPair<K, V>[] data;
int capacity=23;
int used=0;

public FMap(int cap){
super();
capacity=cap;
used =0;
data = new FPair[ capacity];
for(int i=0; i< data.length; ++i)
data[i] = new FPair<K, V>();
}

但是编译器说:

javac -g -Xlint BigramDyn.java
./TemplateLib/FMap.java:23: warning: [rawtypes] found raw type: FPair
data = new FPair[capacity];
^
missing type arguments for generic class FPair<A,B>
where A,B are type-variables:
A extends Object declared in class FPair
B extends Object declared in class FPair
./TemplateLib/FMap.java:23: warning: [unchecked] unchecked conversion
data = new FPair[capacity];
^
required: FPair<K,V>[]
found: FPair[]
where K,V are type-variables:
K extends Object declared in class FMap
V extends Object declared in class FMap
2 warnings

如果我使用 data = new FPair<K, V>[capacity]而不是 data = new FPair[capacity]

编译器说:

TemplateLib/FMap.java:23: error: generic array creation
data = new FPair<K,V>[capacity];
^
1 error

--

和 map 的同等功能:我正在做: map

FMap<K,V> otherPair = (FMap<K,V>) other;

但是编译器说:

./TemplateLib/FMap.java:34: warning: [unchecked] unchecked cast
FMap<A,B> otherPair = (FMap<A,B>) other;
^
required: FMap<A,B>
found: Object
where A,B are type-variables:
A extends Object declared in class FMap
B extends Object declared in class FMap
1 warning

最佳答案

像这样使用 ArrayList:

List<FPair<K, V>> data = new ArrayList<>(capacity);

由于 ArrayList 包装了一个数组,因此您拥有 List 的所有舒适性和数组的功能。

只有在有数据的情况下才填一项,没有new FPair<K, V>(); .


因为 ArrayList 是不允许的:

    data = (FPair<K, V>[]) new FPair<?, ?>[10];

<?, ?><Object, Object>将满足编译器的要求(不再是使用的原始类型 FPair)。虐待/ Actor 是不吉利的。但随着类型被剥离,没有实际区别。

如果要填写每一项(不可取):

    Arrays.fill(data, new FPair<K, V>());

Arrays.setAll(data, ix -> new FPair<K,V>());

第一个在每个位置填充 same 元素,当 FPair 未更改但可以共享时很有用:当它“不可变”时。

第二种只是一种奇特的循环方式。

关于Java:通用数组创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com