2015-06-23 2 views
0

Я новичок в программировании на Android и немного путаюсь в следующем коде. Эта часть кода от андроида сайта разработчика:Какова фактическая цель этого вложенного класса?

public final class FeedReaderContract { 
    // To prevent someone from accidentally instantiating the contract class, 
    // give it an empty constructor. 
    public FeedReaderContract() {} 

    /* Inner class that defines the table contents */ 
    public static abstract class FeedEntry implements BaseColumns { 
     public static final String TABLE_NAME = "entry"; 
     public static final String COLUMN_NAME_ENTRY_ID = "entryid"; 
     public static final String COLUMN_NAME_TITLE = "title"; 
     public static final String COLUMN_NAME_SUBTITLE = "subtitle"; 
     ... 
    } 
} 

Я читал несколько статей о вложенных классов в Java документации и некоторых других блогов и понятном следующие причины для использования вложенного класса:

  1. обеспечивает лучшую герметизацию ,
  2. Если класс связан только с одним другим классом, то лучше сделать вложенный класс этих двух.

Но здесь я не мог найти ничего, чтобы использовать вложенный класс.

В чем именно заключается цель создания вложенного класса?

+4

Лучше искать по _Google_. –

+0

Вложенные классы имеют доступ к полям класса хоста –

ответ

2

Этот конкретный вложенный класс используется как пространство имен для String констант, связанных с его основным классом.

  • Это abstract, поэтому он не предназначен для конкретизации
  • Он реализует BaseColumns интерфейс, который по сути является способ «сбросить» строковые константы в FeedEntry класса

Почему они используется вложенный класс вместо свободно стоящего класса?

Использование вложенного класса подчеркивает «семантическую близость» внутреннего класса к его внешнему классу. Он читает читателям вашего кода, что FeedEntry может быть интерпретирован только в контексте FeedReaderContract. В противном случае FeedEntry не имеет смысла. По сути, это делается для читателей с кодом человека, потому что в этом случае не будет никакой разницы с компилятором.

+0

У меня нет проблем с абстрактным и базовым интерфейсом, я понял их довольно четко. Я просто хочу понять логику использования этого вложенного класса. –

+0

@RaazDhakal Если вы понимаете, что происходит, какую часть их логики вы не понимаете? Почему они использовали вложенный класс, а не отдельно стоящий класс? Или что-то еще? – dasblinkenlight

+0

Yah, почему они использовали вложенный класс вместо самостоятельного класса? –

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