2012-03-28 2 views
1

На следующем надуманном примере data получает предупреждение, из-за которого он не используется. Может кто-нибудь объяснить, почему об этом нужно предупредить?Eclipse предупреждает, что «переменная не используется» в абстрактном классе?

public abstract class Worker { 

    private Object data; 

    public Worker(Object data) { 
     this.data = data; 
    } 

    public abstract Result run(); 

} 

Точка зрения, конечно, заключается в том, что объект данных используется, просто не в этом абстрактном классе. Что я должен делать, чтобы эта ошибка исчезла, т. Е. Это параметр затмения, или я просто делаю что-то неправильно.

ответ

10

Точка зрения, конечно, заключается в том, что объект данных используется, просто не в этом абстрактном классе.

Как? Это личное. Подклассы не смогут его увидеть, если они не используют отражение.

Вы могли сделать protected так что подклассы могут видеть - или лучше (ИМО), обеспечивают защищенный getData() метод.

+0

Просто интересно, почему вы предлагаете защищенный метод 'getData()' будет лучше? – Jacob

+0

@Jacob: Я рассматриваю поля как детали реализации, которые не должны подвергаться нелично, кроме как в действительно исключительных случаях. –

1

Найден ответ! Поскольку переменные объявлены private, они не могут использоваться потомками этого класса. Они должны быть объявлены protected

3

Эта переменная является частной для класса, поэтому на самом деле нельзя получить доступ к каким-либо подтипам. Поскольку вы только назначали его в своем конструкторе, Eclipse предупреждает вас, что он не используется.

Если переменная используется подтипами, начните расширять ее видимость или добавьте геттер/сеттер. Если тип не используется, он не должен быть передан в конструкторе.