Gen*_*zer 23 java generics naming-conventions
我有一个接口,其声明如下:
/**
* @param T - the type of entity.
* @param C - the type of entity container will be returned.
*/
public interface FindByNamedQuery<T extends Serializable, C extends Collection<T>> extends Command {
C executeNamedQuery(String namedQuery);
}
Run Code Online (Sandbox Code Playgroud)
我想知道我是否可以(应该)打破Java命名约定来执行此操作:
public interface FindByNamedQuery<ENTITY_TYPE extends Serializable, RETURNED_CONTAINER extends Collection<ENTITY_TYPE>> extends Command {
RETURNED_CONTAINER executeNamedQuery(String namedQuery);
}
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 24
我想知道我是否可以(应该)打破java命名约定来执行此操作:
不,这应该避免,因为更容易将类型参数与常量和其他标识符混淆.
以下是关于泛型的官方记录的引用:
键入参数命名约定
按照惯例,类型参数名称是单个大写字母.这与您已经了解的变量命名约定形成鲜明对比,并且有充分的理由:如果没有这种约定,就很难区分类型变量和普通类或接口名称.
最常用的类型参数名称是:
E- 元素(Java Collections Framework广泛使用)K- 钥匙N- 数量T- 类型V- 价值S,U,V等-第2,第3,第4类您将在整个Java SE API和本教程的其余部分中看到这些名称.
And*_*mas 23
从20世纪90年代中期开始使用它之后,我开始不同意单字符约定.
我觉得可读的名字更具可读性.这有助于理解泛型类型的实现和接口.
对于Java来说,模糊性问题似乎被夸大了.几个类名都是大写的.常量不在类名称的相同上下文中使用.
确实,@ param JavaDoc元素可以提供更长的描述.但是,JavaDocs也不一定是可见的.(例如,Eclipse中有一个显示类型参数名称的内容辅助.)
例如,比较:
public final class EventProducer<L extends IEventListener<E>,E>
implements IEventProducer<L,E> {
Run Code Online (Sandbox Code Playgroud)
至:
public final class EventProducer<LISTENER extends IEventListener<EVENT>,EVENT>
implements IEventProducer<LISTENER, EVENT> {
Run Code Online (Sandbox Code Playgroud)
虽然Sun/Oracle建议将单字符名称作为约定,但可以更改约定.挑战这一公约的后果是微不足道的.如果您和您的团队更喜欢类型参数的有意义的名称,我个人会选择它.
Google的Java风格允许使用以T结尾的单字母名称和多字符类名称.
每个类型变量都以两种样式之一命名:
单个大写字母,可选地后跟单个数字(例如E,T,X,T2)
用于类的形式的名称(参见第5.2.2节,类名),后跟大写字母T(示例:RequestT,FooBarT).
All*_*ice 10
使用TDescription在C#中很常见.它维护T名称,但同时也是描述性的,如下所示:
public interface FindByNamedQuery<
TEntityType extends Serialiazble,
TReturnedContainer extends Collections<TEntityType>> extends Command
{
TReturnedContainer executeNamedQuery(String namedQuery);
}
Run Code Online (Sandbox Code Playgroud)
正如其他人所说,ALL_CAPS几乎总是表明一个常数.
IMO,"很难区分类型变量和普通类或接口名称." 这里不适用,因为T前缀很容易将其标识为类型变量.
同样,这是C#,但请参阅MSDN:泛型的命名约定
在所有其他情况下,Microsoft的官方通用命名约定指南是:
使用描述性名称命名泛型类型参数,除非单个字母名称完全是自解释的,并且描述性名称不会添加值.
Run Code Online (Sandbox Code Playgroud)public interface ISessionChannel<TSession> {...} public delegate TOutput Converter<TInput,TOutput>(TInput from);- 考虑在参数名称中指示对类型参数的约束.例如,约束到ISession的参数可以称为TSession.
| 归档时间: |
|
| 查看次数: |
5966 次 |
| 最近记录: |