gpt4 book ai didi

Java 将带有参数化枚举的泛型类作为参数传递给另一个泛型对象

转载 作者:行者123 更新时间:2023-12-02 08:08:14 25 4
gpt4 key购买 nike

我正在尝试使用枚举作为类型参数在 Java 中实现参数化类。一切工作正常,除了,如果你看下面的代码,有一个匿名类 Car.Creator参数 K 。但当然,而不是 K ,应该有CarObject<T> ,但这并不那么容易。如果我输入 CarObject<T>K的地方,然后我得到语法错误。有人可以解释一下这样的事情是否可能,并可能提供一些代码示例。

public class CarObject<T extends Enum<T>>
{
public Map<T, String> values;
private Class<T> typeClass;

public CarObject(Class<T> clazz)
{
typeClass = clazz;
values = new EnumMap<T,String>(typeClass);
}


public static final Car.Creator<K> Creator = new Car.Creator<K>()
{
public K create()
{
return new K();
}


public K[] newArray(int size)
{
return new K[size];
}
}
}

我可以给你一个官方的例子Android documentation (查看“类概述”中的代码)这工作得很好。我认为 Android 背后隐藏着一些魔法。我正在尝试做完全相同的事情 - 实现 Parcelable 接口(interface)。我刚刚编了这个例子,没有 implements Parcelable和其他东西,因为我认为这可能只是一个语法糖:)。

最佳答案

看下面的语句 -

public static final Car.Creator<K> Creator = new Car.Creator<K>() {
public K create() {
return new K();
}
public K[] newArray(int size) {
return new K[size];
}
}; // <------ missing a semicolon here

看起来您有一个通用类Creator,在类Car中定义为静态内部类。并且,在这里您尝试使用它并实例化它,因此不能在这里使用 K ,除非它是在某处定义的类或接口(interface)。

我认为下面的例子解释了我的意思 -

// you are not defining a class here so no parameter instead use a real class
public static final List<K> list = new List<K>() { /*....*/ };

关于Java 将带有参数化枚举的泛型类作为参数传递给另一个泛型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829363/

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