Java类/接口中的编码风格默认注释和元信息
在一些代码库中,我看到的注释可以描述为默认注释。这些评论通常会出现在项目的每个文件中,我相信,在大多数情况下,它们是在IDE的帮助下自动生成的。元信息有点不同。这实际上是代码的一部分。我想我最好用例子来说明这一点。这是我们的测试主题(取自现实生活并简化):
public class UserServiceImpl implements IUserService {
////////////////////////////////////////////////////////////////////////
// Constants
////////////////////////////////////////////////////////////////////////
/** Logger for this class */
@SuppressWarnings("unused")
private static final Log LOG = LogFactory.getLog(UserServiceImpl.class);
////////////////////////////////////////////////////////////////////////
// Attributes
////////////////////////////////////////////////////////////////////////
/** User DAO */
private IUserDao userDao;
////////////////////////////////////////////////////////////////////////
// Constructors
////////////////////////////////////////////////////////////////////////
/**
* Default constructor
*/
public UserServiceImpl() {
}
public UserServiceImpl(final IUserDao userDao) {
this.userDao = userDao;
}
////////////////////////////////////////////////////////////////////////
// Getter and Setter methods
////////////////////////////////////////////////////////////////////////
/**
* @return value of {@link #userDao} field
*
*/
public IUserDao getUserDao() {
return userDao;
}
/**
* Sets {@link #userDao} field
*
* @param userDao User DAO
*/
public void setUserDao(final IUserDao userDao) {
this.userDao = userDao;
}
////////////////////////////////////////////////////////////////////////
// Implemented/Overridden methods
////////////////////////////////////////////////////////////////////////
/**
*
* @see IUserService#saveUser(User)
*/
@Override
public void saveUser(final User user) {
fillMissingFields(user);
userDao.saveUser(user);
}
/**
*
* @see IUserService#getUserById(Integer)
*/
@Override
public List<User> getUserById(final Integer id) {
return userDao.getUserById(id);
}
/**
*
* @see IUserService#getUserList(IEnvironmentContext)
*/
@Override
public List<User> getUserList(final @SuppressWarnings("unused") IEnvironmentContext context) {
return userDao.getUserList();
}
////////////////////////////////////////////////////////////////////////
// Helper methods
////////////////////////////////////////////////////////////////////////
private void fillMissingFields(final User user) {
user.setLastUpdated(new Date());
}
////////////////////////////////////////////////////////////////////////
// toString() method
////////////////////////////////////////////////////////////////////////
/**
*
* @see Object#toString()
*/
@Override
public String toString() {
return "UserServiceImpl {...}";
}
}
这个类包含了很多我想讨论的概念,所以我将它们分为以下几种类型:
1)节默认注释-对于类的每个节,都有一个三行注释(如常量、构造函数等)。请注意,我不是在谈论类的逻辑部分(比如// user managenet
或// Account Balance calculation
)
2)Getter和Setter默认注释——set/get方法的注释,它们只告诉对应的方法返回字段值集
3)元注释——描述某些java语言结构含义的注释。上面的例子:@see IUserService#saveUser(User)
说明方法被重写/实现,父方法的位置Default constructor
说明它是Java类的默认构造函数Logger for this class
4)@SuppressWarnings(“unused”)在我的具体例子中,它曾经说,LOG
在类中没有使用(LOG
在类中确实从未使用过,但IDE不会显示警告)并且context
参数没有使用,但这没关系(假设context
是一些一般信息,如果实现不使用它,通常是完全正常的)
5)I
接口前缀-前缀告诉我们,这是接口
方法参数防止方法体中的代码更改其值
我想知道你对课堂默认评论和元信息的看法为了让它更简单,我建议你为每种类型投票,分数从+5降到-5:
+5-我认为这是必须的,每个Java开发人员都应该这样做,甚至应该使用工具(比如checkstyle)来实施
...
0-我不在乎。如果有人让我这么做,我会的——这些评论不会带来任何正面或负面的价值
...
-5-我强烈建议大家不要这样做。一旦你看到这些默认的评论/元信息,就应该立即从课堂上删除
我也坚信,向你们解释这个选择并回答这个问题是非常重要的:你们为什么这么认为?(我个人一直努力遵守这条规则)。所以我也鼓励你们解释你们为特定类型给出的观点
我将在大约一周内以最多的票数接受答案
PS.:你们中的一些人可能认为答案是不言而喻的,但相信我,我们每个人都非常不同,对你们来说不言而喻的事情可能会让我感到惊讶,反之亦然。所以我鼓励你们无论如何都要参加这个讨论。(我将不胜感激)
共 (0) 个答案