在Java中,是否可以在接口内使用类型变量作为数组元素?

时间:2011-01-19 18:34:03

标签: java generics interface enums

在Java中,是否可以在接口中使用类型变量作为数组元素?

我尝试过作为归档类型和强制转换操作符,但总是得到错误

  

无法对非静态类型A

进行静态引用
interface ITest<A> {
    A[] j; // Cannot make a static reference to the non-static type A
    Object[] = (A[]) new Object[3]; // Cannot make a static reference to the non-static type A
}

是否有任何情况,我可以在界面中使用构造A[](以及枚举类型?)?

class CTest<A> {
    enum MyEnum {
        F, G, H;
        // something that uses A[] inside. Getting the same error as above
    }
}

2 个答案:

答案 0 :(得分:4)

您可以在界面中使用通用数组类型,如下所示:

public interface Foo<T> {
    void doSomething(T[] array);
}

你的问题是你试图在一个接口中声明一个字段,除了常量之外你基本上不能做。你不能在接口中声明泛型数组类型的字段,但我希望你不会想要。

不可否认,类型擦除使得数组和泛型的组合在各种情况下有些尴尬,但我认为上述问题至少回答了你提出的问题。

答案 1 :(得分:1)

接口are implicitly public, static and final中的字段,它们基本上是常量。并且您不能拥有依赖于类型参数的常量,因为在Java参数中会从编译类型中删除。

顺便说一句,这与您是否使用数组无关,

public interface X<T> {
    T c = (T)new AnyType();
}

也不起作用。

也不会
public class X<T> {
  public static final T c = (T)new AnyType();
}