2014-10-24 2 views
-1

Я объект представлен следующим образом:Доступ защищенный класс в Java

public final class FooFunc<KEYIN extends WritableComparable, 
          VALUEIN extends Writable, 
          KEYOUT extends WritableComparable, 
          VALUEOUT extends Writable> extends FooFunction<T<KEYIN,VALUEIN>, 
          T<KEYOUT,VALUEOUT>> implements Q<T<KEYOUT,VALUEOUT>>, S 

private transient Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> mapper; // main is this line 
    ... 
} 

Я работаю с картографами, чья информация доступна по адресу: link

Mapper имеет некоторые защищенные элементы (настройки, очистки и методы карты), к которым я хотел бы получить доступ, но я не могу получить к ним доступ. Как мне это сделать, чтобы убедиться, что я могу получить доступ к этим методам?

+0

почему вы хотите, чтобы иметь возможность доступа к ним? не переопределяет метод запуска? –

+0

Отражение. ---- –

ответ

1


Защищенные методы класса могут быть доступны только подклассам этого класса. Я согласен с Dawnkeeper, что, скорее всего, проблема с дизайном, если вы попытаетесь получить доступ к защищенным методам с отражением. Их предполагаемое использование заключается в том, чтобы позволить подклассам изменять конкретную сторону поведения своего суперкласса (см., Например, шаблонный шаблон шаблона: http://en.wikipedia.org/wiki/Template_method_pattern)

, например.

public class Foo{ 
    public int getX() {return getProtectedX();} 
    protected int getProtectedX() {return 42;} 
} 

public class Bar extends Foo{ 
    protected int getProtectedX() {return 43;} 
} 

public class runner{ 
public static void main() 
    { 
     Foo x=new Foo(); 
     System.out.println(x.getX()); // 42 
     Bar y=new Bar(); 
     System.out.println(y.getX()); // 43 
    } 
} 

Bye, Маркус

Смежные вопросы