В Java, в отличие от C ++, это невозможно из-за способа реализации обобщений.В Java существует только один класс для каждого универсального типа, а не несколько копий для каждого использования аргумента другого типа (это называется стирание ).В результате вы не можете иметь единственную переменную, которая указывает на объект класса его подтипа, потому что может быть много подтипов, но всегда есть только одна копия статического поля.Это отличается от C ++, где каждый раз, когда создается экземпляр шаблона ILogger
, вы получаете собственную копию этого статического поля.
Одним из возможных приближений было бы иметь Map
в качестве статического поля, связывающего классобъекты со строками, как в
public static final Map<Class, String> classMap = new HashMap<Class, String>();
Затем вам нужно будет явно добавить каждый подтип к этой карте, возможно со статическим инициализатором:
public class Sub implements ILogger<Sub> {
static {
ILogger.classMap.put(Sub.class, /* ... value ... */);
}
public Sub() {
Log.debug(LogTag, ...);
}
}
Надеюсь, это поможет!