Java类/接口中的默认注释和元信息
在一些代码库中,我看到了可以描述为默认注释的注释。这些注释通常会出现在项目的每个文件中,我相信,在大多数情况下,它们是在IDE的帮助下自动生成的。元信息有点不同。这实际上是代码的一部分。我想我最好在例子中说明这一点。这是我们的测试主题(取自现实生活并简化):Java类/接口中的默认注释和元信息,java,coding-style,comments,Java,Coding Style,Comments,在一些代码库中,我看到了可以描述为默认注释的注释。这些注释通常会出现在项目的每个文件中,我相信,在大多数情况下,它们是在IDE的帮助下自动生成的。元信息有点不同。这实际上是代码的一部分。我想我最好在例子中说明这一点。这是我们的测试主题(取自现实生活并简化): 公共类UserServiceImpl实现IUserService{ //////////////////////////////////////////////////////////////////////// //常数 ////////
公共类UserServiceImpl实现IUserService{
////////////////////////////////////////////////////////////////////////
//常数
////////////////////////////////////////////////////////////////////////
/**此类的记录器*/
@抑制警告(“未使用”)
私有静态最终日志日志=LogFactory.getLog(userserviceinpl.class);
////////////////////////////////////////////////////////////////////////
//属性
////////////////////////////////////////////////////////////////////////
/**用户道*/
私有IUserDao userDao;
////////////////////////////////////////////////////////////////////////
//建设者
////////////////////////////////////////////////////////////////////////
/**
*默认构造函数
*/
公共用户服务impl(){
}
公共UserServiceImpl(最终IUserDao用户DAO){
this.userDao=userDao;
}
////////////////////////////////////////////////////////////////////////
//Getter和Setter方法
////////////////////////////////////////////////////////////////////////
/**
*{@link#userDao}字段的@return值
*
*/
公共IUserDao getUserDao(){
返回userDao;
}
/**
*设置{@link#userDao}字段
*
*@param userDao用户DAO
*/
公共void setUserDao(最终IUserDao userDao){
this.userDao=userDao;
}
////////////////////////////////////////////////////////////////////////
//实现/重写的方法
////////////////////////////////////////////////////////////////////////
/**
*
*@请参阅IUserService#saveUser(用户)
*/
@凌驾
公共void保存用户(最终用户){
fillMissingFields(用户);
userDao.saveUser(用户);
}
/**
*
*@see IUserService#getUserById(整数)
*/
@凌驾
公共列表getUserById(最终整数id){
返回userDao.getUserById(id);
}
/**
*
*@see IUserService#getUserList(IEnvironmentContext)
*/
@凌驾
公共列表getUserList(最终@SuppressWarnings(“未使用”)IEnvironmentContext上下文){
返回userDao.getUserList();
}
////////////////////////////////////////////////////////////////////////
//辅助方法
////////////////////////////////////////////////////////////////////////
私有void fillMissingFields(最终用户){
user.setLastUpdated(新日期());
}
////////////////////////////////////////////////////////////////////////
//toString()方法
////////////////////////////////////////////////////////////////////////
/**
*
*@see Object#toString()
*/
@凌驾
公共字符串toString(){
返回“UserServiceImpl{…}”;
}
}
这个类包含了很多我想讨论的概念,所以我将它们分为以下几种类型:
1)节默认注释-对于类的每个节,都有一个三行注释(如常量、构造函数等)。请注意,我并不是在讨论类的逻辑部分(比如//user managenet
或//Account Balance calculation
)
2)Getter和Setter默认注释-set/get方法的注释,这些注释只告诉对应的方法返回字段值集
3)元注释——描述某些java语言结构含义的注释。上面的示例:@请参阅IUserService#saveUser(User)
-说明方法已被重写/实现,父方法的位置,默认构造函数
-说明它是Java类的默认构造函数,此类的记录器
4)@SuppressWarnings(“unused”)-在我的具体示例中,它常说,LOG
不在类中使用(LOG
实际上从未在类中使用过,但IDE不会显示警告)并且不使用上下文
参数,但这没问题(假设context
是一些一般信息,如果实现不使用它,通常是完全正常的)
5)I
接口前缀-前缀告诉我们,这就是接口
6)final
用于方法参数-防止方法体中的代码更改其值
我想知道您对课堂上默认评论和元信息的看法。为了更直观,我建议您对每种类型的评分从+5到-5进行投票:
+5-我认为这是必须的,每个Java开发人员都应该这样做,甚至应该使用工具(如checkstyle)来强制执行...
0-我不在乎。如果有人告诉我去做,我会的——这些评论不会带来任何积极或消极的价值
...
-5-我强烈建议大家不要这样做。一旦你们看到这些默认的注释/元信息,你们就应该从类中删除它们
我还坚信,向你们解释你们的选择并回答这个问题是非常重要的:你们为什么这么认为?(我个人一直努力遵守这条规则)。所以我也鼓励你们解释你们为特定类型给出的观点 我将在大约一周内以最多的票数接受答案 PS.:你们中的一些人可能会变瘦
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 {...}";
}
}