Другой способ - расширить класс (если это возможно) и получить доступ к защищенному методу с помощью наследования. Если вы не создадите Объект, это невозможно, так как вам это понадобится во время компиляции, и вам нужно будет создать Объект самостоятельно.
Изворотливое решение может заключаться в использовании композиции. Таким образом, вы создаете класс в том же пакете, например OtherObjectWrapper. Поскольку он находится в том же пакете, вы можете вызывать защищенный метод объекта через открытый API, который вы предоставляете. Это не рекомендуется, так как вам не принадлежит пакет, к которому вы добавляете класс, и вы можете сделать свой код очень хрупким, например
package com.foo;
public class OtherObjectWrapper {
private com.foo.OtherObject wrappedObject;
public OtherObjectWrapper(com.foo.OtherObject wrappedObject) {
this.wrappedObject = wrappedObject;
}
public void callTheProtectedMethod() {
wrappedObject.callTheProtectedMethod();
}
}
Подумайте, что думал дизайнер API, когда они помечали метод как защищенный? Может быть, они понятия не имели, что они делают, и это должно быть публично, или, что еще хуже, это должен быть пакет приватный или приватный. Или, возможно, они сделали, и они определили, что только код в том же пакете или через наследование должен иметь доступ к защищенному методу. Если он защищен, это может быть по какой-то причине, поэтому будьте осторожны, так как вы можете связать поведение вашего кода с поведением, которое может изменить и нарушить ваш код. Также посмотрите, кто владеет сторонним объектом и существует ли лучший API для доступа к функциональности защищенного метода.