У меня есть два Java-проекта: один - это библиотека, а другой - консольное приложение. В проекте библиотеки у меня есть абстрактный класс с несколькими статическими переменными-членами (для глобального доступа). Это выглядит примерно так:Использование статического члена из абстрактного класса, расположенного в библиотеке JAR
public abstract class AbstractHelper
{
public static final VarType someVar = new VarType();
}
Я получаю доступ к статическим переменным-членам из консольного приложения в двух разных классах.
По какой-то причине «someVar» имеет уникальные экземпляры для двух разных классов, которые к нему обращаются. Если я получаю доступ к «someVar» из экземпляра класса A, я получаю другой объект, чем когда я обращаюсь к «someVar» из экземпляра класса B.
Однако, если я перемещаю AbstractHelper из проекта библиотеки в консольное приложение проект, то он имеет ожидаемое поведение (один экземпляр статической переменной-членом, разделяемой несколькими классами)
Кто-нибудь знает, почему это происходит?
Разные погрузчики классов. –
Итак, просто для подтверждения .. ссылка AbstractHelper от ClassA и из результатов ClassB в двух разных загрузчиках классов loading AbstractHelper? Почему это работает, когда AbstractHelper является частью одного и того же проекта? В этом случае не загружается AbstractHelper? – user1972838
У вас могут быть два (или более) разных экземпляра класса AbstractHelper, в разных загрузчиках классов. Это может произойти несколькими способами, чаще всего, если у вас есть две разные копии класса в разных файлах jar. Если это произойдет, то, конечно, будут два разных экземпляра статической переменной. –