Использование as
для отливки делает его немного более читаемым с той же функциональностью.
Func(null as Class1);
В Java: Foo
, AbstractFoo
и Foo
- хотя AbstractFoo
может быть просто Foo
.
Доказательства:
java.util.List
(интерфейс) java.util.AbstractList
(абстрактный класс) java.util.Formatter.BigDecimalLayoutForm
(enum) Информацию об интерфейсе см. В разделе Соглашения об именах документа Java Coding Conventions. Однако здесь не говорится о перечислениях и абстрактных классах.
интерфейсы: Foo
Причина: Ваш код не должен знать, что они имеют дело с интерфейсом. Написание «IFoo» делает именно это. Вместо этого Foo дает понять, что «Foo» является универсальным, и стоящий за ним объект может быть «NumFoo» или «StrFoo». Коду действительно не нужно заботиться.
абстрактные классы: AbstractFoo
Причина: ваш код никогда не будет использовать этот класс напрямую. Вы всегда будете создавать подклассы этого класса, чтобы создавать классы, которые используются другим кодом. Таким образом, программисту должно быть ясно, что этот класс является абстрактным. И что лучше назвать абстрактным! В местах, где вам нужно использовать ссылки типа AbstractFoo, вам следует пересмотреть использование интерфейса. (Конечно, в C ++ это невозможно)
Перечисления: FooType или FooEnum. Лично FooType лучше, потому что Type легче соотносится с «реальным миром», чем Enum.
Ура!
Мое соглашение:
Foo
; AbstractFoo
; Foo
, но в некоторых случаях FooType
. IFoo
очень похож на .Net, а не на Java. FooInterface
Я никогда не видел, чтобы его использовали.
Никаких специальных соглашений.
Наличие специальных соглашений об именах для этих типов классов по сути является формой венгерской нотации (плохой вид): информация, которую она дает вам, уже присутствует в синтаксисе и обычно становится легко доступным в IDE, например, при наведении курсора на имя. Вводить его в само имя бессмысленно и некрасиво.
Имена классов должны просто как можно лучше описывать роль класса. Это может привести к «естественным» соглашениям об именах - очень хорошим примером является соглашение Java об именах интерфейсов с суффиксом -able (Iterable, Comparable) - но я не хочу представить результат, если он применялись повсеместно, и List, Map и т. д. должны были следовать им.
Мое соглашение:
Мне очень не нравится использовать I в именах интерфейсов или даже FooInterface:
interface FooInterface {
это как писать:
class FooClass {
или даже:
abstract class AbstractFooClass {
это просто многословно.