我对 java 还很陌生,对这种行为有点困惑
public class MyBase<T> {
static int id;
}
public class DerA extends MyBase<DerA> {
}
public class DerB extends MyBase<DerB> {
}
我期望DerA.id
和Derid
是两个不同的static
变量。但它似乎共享同一个!这种行为对我来说毫无意义——它有两种不同的类型。
泛型与此无关;与 C++ 中的模板不同,您在运行时只有一个类MyBase
(称为Type Erasure),因此它只有一个静态变量。
static
变量只属于定义它们的类。两个导数都没有这个变量。您想要的称为(在其他语言中,例如 Smalltalk)类变量,而 Java 没有这样的东西。
类型变量不适用于静态上下文。例如,您也不能这样做:
public class MyBase<T>
{
static T t;
static void foo(T t){}
}