2010-10-15 2 views
7

Меня спрашивает один из коллег о классе Throwable в java API.Что такое стандарт для именования интерфейса в java api

Согласно стандарту, я понимаю, каждое слово, заканчивающееся * возможно, является интерфейсом в java API. Существует отраслевой стандарт использования таких слов, как имена интерфейсов. Поэтому я, бессознательно, рассказал ему об этом как о базовом интерфейсе для всех исключений и типов ошибок в java-мире. Затем он показывает мне java-файл для этого класса.

Мои вопросы:

  1. Почему Java народ выбрали это имя, чтобы быть классом. Я думаю, что это должен был быть интерфейс по умолчанию?

  2. Это шаблон для использования * способных слов как интерфейс?

  3. Есть ли какой-либо другой пример класса, заканчивающийся на * возможно?

С уважением.

+1

Сериализуемый, Итерабельный, Сопоставимый, Управляемый, Вызываемый. Все довольно часто используемые интерфейсы. – Thilo

+0

@Thilo: На самом деле это интерфейсы. Я изучаю классы, заканчивающиеся такими способами. –

ответ

20

Это очень распространенное явление, когда эти «-able» имена являются интерфейсами на Java, но нет официального соглашения об именах интерфейсов, которое я нашел, что предполагает, что имена «-able» должны быть именами интерфейсов, хотя обычно это это так.

соглашения об именовании Официального Java можно найти здесь - это довольно скудная, там действительно нет никаких ограничений для класса или интерфейса именования:

Что касается вашего Throwable вопроса, Джеймс Гослинг однажды ответил, почему это класс, а не интерфейс, хотя имя было более подходящим для интерфейса.

К сожалению, оригинал статьи с сайта Sun/Oracle, исчез в интернет-эфир, поэтому я могу только обеспечить косвенное атрибуции:

редактирования: Так как я продолжайте получать ответы на этот вопрос, я нашел ссылку на обсуждение Sun через Wayback Machine, здесь: http://web.archive.org/web/20071013225816/http://java.sun.com/features/2002/03/gosling.html?source=jdc_news&date=20020430

JDC: Почему Throwable не интерфейс? Название типа предполагает, что это должно было быть. Возможность улавливать типы, то есть нечто вроде try {} catch(), а не только классов. Это сделает язык программирования Java более гибким.

JG: Причина, по которой Throwable и остальные из этих парней не являются интерфейсами, заключается в том, что мы решили, или я решил довольно рано. Я решил, что хочу иметь какое-то состояние, связанное с каждым исключением, которое бросает. И вы не можете делать это с интерфейсами; вы можете делать это только с помощью классов. Состояние, которое есть, в основном стандартное. Там есть сообщение, есть моментальный снимок, все такое, что всегда есть. а также, если вы сделаете Throwable интерфейс, соблазн назначить, чтобы любой старый объект был Throwable thing. Стюартично, что бросать общие объекты - это, вероятно, плохая идея, что вещи, которые вы хотите бросить, действительно должны быть вещами, которые призваны быть исключениями, которые действительно захватывают природу исключения и то, что происходит. Это не просто общие структуры данных.

+1

+1 отличная информация от JG Я раньше не видел –

+0

+1 для хорошего просмотра в Интернете, спасибо за ваш ответ. –

+0

Действительно хорошая находка! – RecursiveExceptionException

29

Существительные всегда используются для обозначения классов, но Throwable является исключением.

(Посмотрите, что я там делал?)

+1

осторожно со словами типа «всегда». * Collection *, * Map *, * Set *, * List *, ... хотел бы слово. Но да, я видел, что вы сделали :) –

+12

+1 для каламбура = 8-) – Yuval

+5

возможно Throwable - это ошибка: D – mschonaker

0

Мы говорим о соглашения об именах здесь и да, * возможность является предпочтительным соглашение для именования интерфейсов. Как я уверен, вы видели, всегда есть исключения. Например, System.arraycopy не является верблюжьим корпусом.

2

Есть другие, такие, как

И, конечно, есть множество интерфейсов, которые не заканчиваются - умелым. Некоторым людям нравится приписывать все свои имена интерфейсов «I» (IAdjustable вместо Регулируемый). Подобно кодам, форматирующим войны, их не универсальное соглашение. У Солнца есть suggestions, но они довольно расплывчаты.

2
  1. имена интерфейсов всегда должны быть прилагательным и, если возможно, должен закончиться в «состоянии» была тенденция в именовании в сообществе Java. Это не обязательно должно строго следовать, это просто соглашение об именах, вам нечего мешать вам называть интерфейс/класс тем, что вы хотите.

  2. Да, см http://www.iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names

  3. Клонируемых

* Обратите внимание, имена интерфейсов обычно должно быть прилагательных, в то время как имена классов обычно должны быть существительные.

Посмотрите страницу 15 этого руководства по стилю, выпущенную Sun. http://java.sun.com/docs/codeconv/CodeConventions.pdf

Существует также дискуссия относительно того, является ли хороший стиль добавлением буквы I в интерфейсы. (Пример: ICat, IDog и т. Д.), Но это, как правило, относится к другим языкам, а не к Java для каждого.

В моем личном мнении конвенция - это просто «эмпирическое правило», если конвенция мешает читаемости вашего кода, перейдите к более описательному имени интерфейса/класса, а не к следующему соглашению, но если вы действительно пытаетесь найти хорошее описательное имя класса, возможно, вам нужно еще немного подумать о функциональности вашего класса/интерфейса.

+0

Вы имеете в виду: Cloneable, Другие, похоже, не в Java API. –

+0

@ vijay.shad: спасибо, мое плохое, исправлено. –

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