有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案