0

我对 java 还很陌生,对这种行为有点困惑

public class MyBase<T> {
static int id;
}

public class DerA extends MyBase<DerA> {
}

public class DerB extends MyBase<DerB> {
}

我期望DerA.idDerid是两个不同的static变量。但它似乎共享同一个!这种行为对我来说毫无意义——它有两种不同的类型。

4

2 回答 2

5

泛型与此无关;与 C++ 中的模板不同,您在运行时只有一个类MyBase(称为Type Erasure),因此它只有一个静态变量。

static变量只属于定义它们的类。两个导数都没有这个变量。您想要的称为(在其他语言中,例如 Smalltalk)类变量,而 Java 没有这样的东西。

于 2013-09-26T21:33:47.660 回答
0

类型变量不适用于静态上下文。例如,您也不能这样做:

public class MyBase<T> 
{
    static T t;

    static void foo(T t){}
}
于 2013-09-26T21:57:08.147 回答