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

标签 java generics enums parameterization

我正在尝试使用枚举作为类型参数在 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/

相关文章:

java - 运行时创建内存高效常量的技术

Java文件复制 - 如何继承目标目录的权限

Java netbeans 将逗号添加到表中

c - typedef 枚举,在其中赋值

c# - 泛型 C# 如何通过参数传递泛型对象的属性

c# - 在 LINQ 中使用求和方法

ruby-on-rails - 我应该如何测试 Rails 枚举?

java - classname.class 返回什么?

java - 使用 for 循环将二维数组转换为一维数组

java - 通过泛型参数传递时,过滤器无法访问内部对象的方法