Почему неявно статичны все поля в интерфейсе и окончательный?

Можно получить WCF к (вид косвенно) называют не конструкторов по умолчанию, для этого для работы Вам нужно поставщику экземпляра самокрутки. Необходимо было бы реализовать IInstanceProvider и добавить службу поддержки Поведение. Некоторые ссылки, которые покажут Вам, как сделать это в сочетании с Spring.NET:

Сервисное Внедрение зависимости WCF

Пример кода Сервисное Внедрение зависимости WCF

94
задан Willi Mentzel 1 December 2015 в 12:56
поделиться

3 ответа

Интерфейс не может иметь поведение или состояние, потому что он предназначен для указания только контракта взаимодействия, без деталей реализации. Никакое поведение не применяется, если не разрешены тела методов / конструкторов или блоки инициализации статических / экземпляров. Никакое состояние не применяется только при разрешении только статических полей final. Следовательно, класс может иметь состояние (статическое состояние), но состояние экземпляра не определяется интерфейсом.

BTW: Константа в Java определяется статическим окончанием поле (и по соглашению в названии используется UPPER_CASE_AND_UNDERSCORES).

123
ответ дан 24 November 2019 в 06:06
поделиться

The fields must be static because they can't be abstract (like methods can). Because they can't be abstract, the implementers will not be able to logically provide the different implementation of the fields.

The fields must be final, I think, because the fields may be accessed by many different implementers allows they to be changeable might be problematic (as synchronization). Also to avoid it to be re-implemented (hidden).

Just my thought.

9
ответ дан 24 November 2019 в 06:06
поделиться

Здесь пропущено несколько моментов:

Тот факт, что поля в интерфейсе неявно статичны, final не означает, что они должны быть скомпилированы -временные константы или даже неизменяемые. Вы можете определить, например,

 интерфейс I {
 Строка TOKEN = SomeOtherClass.heavyComputation ();
 JButton BAD_IDEA = новый JButton ("привет");
}

(Помните, что выполнение этого внутри определения аннотации может сбить с толку javac из-за того, что приведенное выше фактически компилируется в статический инициализатор.)

Кроме того, причина этого ограничения носит более стилистический характер. чем техническая, и многие люди хотели бы, чтобы она была расслабленной .

17
ответ дан 24 November 2019 в 06:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: