在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
}
}
答案 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();
}