Очень часто эти «-able» имена являются интерфейсами в Java, но я не нашел официального соглашения об именах интерфейсов, которое предполагает, что «-able» имена должны быть именами интерфейсов, хотя обычно этослучай.
Официальные соглашения об именах Java можно найти здесь - он довольно прост, на самом деле нет никаких ограничений для имен классов или интерфейсов:
Что касается вашего Throwable
вопроса, Джеймс Гослинг однажды ответил, почему это класс, а не интерфейс, хотя название было более подходящим для интерфейса.
К сожалению, оригинальная статья изСайт Sun / Oracle исчез в интернет-эфире, поэтому я могу предоставить только косвенную атрибуцию:
edit: Поскольку я продолжаю получать ответы на этот вопрос, я нашел ссылку на обсуждение 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.Стилистически кажется, что бросание общих объектов - это, вероятно, плохая идея, что вещи, которые вы хотите бросить, действительно должны быть вещами, которые должны быть исключениями, которые действительно отражают природу исключения и то, что происходило.Это не просто общие структуры данных.