Ръководство за вътрешни интерфейси в Java

1. Въведение

В този кратък урок ще разгледаме вътрешните интерфейси в Java. Те се използват главно за:

  • решаване на проблема с пространството на имена, когато интерфейсът има общо име
  • увеличаване на капсулирането
  • повишаване на четливостта чрез групиране на свързани интерфейси на едно място

Добре известен пример е интерфейсът Entry, който е деклариран вътре в интерфейса Map . Дефиниран по този начин, интерфейсът не е в глобален обхват и е посочен като Map.Entry, като го диференцира от другите интерфейси на Entry и прави връзката му с Map очевидна.

2. Вътрешни интерфейси

По дефиниция декларирането на вътрешен интерфейс се случва в тялото на друг интерфейс или клас.

Те са имплицитно публични и статични, както и техните полета, когато са декларирани в друг интерфейс (подобно на декларациите на полета в интерфейси от най-високо ниво) и могат да бъдат внедрени навсякъде:

public interface Customer { // ... interface List { // ... } }

Вътрешните интерфейси, декларирани в друг клас, също са статични , но те могат да имат спецификатори за достъп, които могат да ограничат къде могат да бъдат внедрени:

public class Customer { public interface List { void add(Customer customer); String getCustomerNames(); } // ... }

В горния пример имаме списък с интерфейс, който ще служи за деклариране на някои операции в списъка с клиенти , като добавяне на нови, получаване на представяне на String и т.н.

Списъкът е широко разпространено име и за да работим с други библиотеки, дефиниращи този интерфейс, трябва да отделим нашата декларация, т.е. да я направим пространство от имена .

Тук използваме вътрешен интерфейс, ако не искаме да използваме ново име като CustomerList.

Също така запазихме два свързани интерфейса заедно, което подобрява капсулирането.

И накрая, можем да продължим с изпълнението му:

public class CommaSeparatedCustomers implements Customer.List { // ... }

3. Заключение

Разгледахме вътрешните интерфейси в Java.

Както винаги, примерни кодове могат да бъдат намерени в GitHub.