У меня проблема:java: статические методы и наследование. Есть ли способ обойти это?
Есть двигатель, который вызывает статический метод SuperClass (который мы будем называть SuperClass.StaticMethod). У меня нет доступа к коду движка, но я могу задуматься над ним.
Я подклассифицировал SuperClass (генератор SubClass), и я смог редактировать частные поля, унаследованные от SuperClass через отражение. Все в порядке до этого момента.
У двигателя есть класс (назовем его Constants), который имеет статические конечные экземпляры множества классов, включая SuperClass, но не мой SubClass, так как он не является частью движка.
Теперь SuperClass.StaticMethod делает эквивалент этого:
public int StaticMethod(int i)
{
if(i == 0)
return Constants.SuperClassInstance.Field_1;
else if(i == 1)
return Constants.SuperClassInstance.Field_2;
}
Оба SuperClass.Field_1 и SuperClass.Field_2 являются частными (и они не являются статичными, люди думали, что они были, поэтому я редактирую вопрос немного), но статический метод имеет видимость их, потому что он является членом SuperClass. Как я уже сказал, мне удалось установить значения этих полей в моем унаследованном SubClass посредством отражения, но из-за того, как работает SupperClass.StaticMethod, как показано выше, это не влияет на него.
Я не думаю, что могу изменить SuperClassInstance.Field_1 и Field_2, иначе я сломал бы SuperClass, немного, но разумно.
Есть ли способ решить это?
Это совсем не ясно * почему * вы пытаетесь нарушить контроль доступа в первую очередь. –
Потому что мне нужен мой класс для совместной работы с движком. Мне нужен движок, чтобы сделать мой SubClass правильно. Я упростил код, потому что в этом суть проблемы, но это проблема рендеринга. – user2212990
Похоже, что двигатель не предназначен для работы таким образом. Сгибающий код против его дизайна почти всегда плохая идея. –