我对Java相当陌生,对此行为感到有些困惑

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

public class DerA extends MyBase<DerA> {
}

public class DerB extends MyBase<DerB> {
}


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

最佳答案

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

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

07-24 09:43