Java 使用集合接口名作为变量名的一部分是否是一种良好的做法?

Java 使用集合接口名作为变量名的一部分是否是一种良好的做法?,java,Java,我知道使用体贴是一种不好的做法 但是,当我们处理集合时,使用集合接口名作为变量名的一部分是一种不好的做法 例1: List<Student> listStudents; //or List<Student> studentsList; List<Student> listStudents; **NO** 列出学生名单; //或 列出学生名单; 对 List<Student> students; Map<Integer,

我知道使用体贴是一种不好的做法

但是,当我们处理集合时,使用集合接口名作为变量名的一部分是一种不好的做法

  • 例1:

     List<Student> listStudents; 
     //or
     List<Student> studentsList;
    
     List<Student> listStudents; **NO**
    
    列出学生名单;
    //或
    列出学生名单;
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    列出学生名单;
    
  • 例2:

    Map<Integer, Student> mapStudents; 
    //or 
    Map<Integer, Student> studentsMap; 
    
    Map<Integer, Student> studentsByID; **YES**   
    
    Map学生;
    //或
    地图学生地图;
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Map学生;
    
  • 例3:

       Set<Student> setStudents;  
       //or
       Set<Student> studentsSet
    
       Set<Student> specialNeedsStudents;  **YES**
    
    设置学生;
    //或
    集合学生集合
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Set学生;
    

我想说,将集合的名称添加到变量名通常被认为是一种不好的做法


有很多工具可以告诉您变量的类型,而无需查找定义,这使得这些信息变得多余

我想说,将集合的名称添加到变量名通常被认为是一种不好的做法


有很多工具可以告诉您变量的类型,而无需查找定义,这使得这些信息变得多余

如果您更仔细地选择名称,您通常会发现,如果您正确地描述集合的功能,而不是它是什么,您会发现这要容易得多

  • 例1:

     List<Student> listStudents; 
     //or
     List<Student> studentsList;
    
     List<Student> listStudents; **NO**
    
    列出学生名单**没有**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    列出所有学生**对**
    
  • 例2:

    Map<Integer, Student> mapStudents; 
    //or 
    Map<Integer, Student> studentsMap; 
    
    Map<Integer, Student> studentsByID; **YES**   
    
    Map studentsByID**是**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Map学生**没有**
    
  • 例3:

       Set<Student> setStudents;  
       //or
       Set<Student> studentsSet
    
       Set<Student> specialNeedsStudents;  **YES**
    
    设置特殊需求学生**对**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Set学生**没有**
    

如果您更仔细地选择名称,您通常会发现,如果您正确地描述收藏的功能,而不是它是什么,您会发现这会容易得多

  • 例1:

     List<Student> listStudents; 
     //or
     List<Student> studentsList;
    
     List<Student> listStudents; **NO**
    
    列出学生名单**没有**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    列出所有学生**对**
    
  • 例2:

    Map<Integer, Student> mapStudents; 
    //or 
    Map<Integer, Student> studentsMap; 
    
    Map<Integer, Student> studentsByID; **YES**   
    
    Map studentsByID**是**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Map学生**没有**
    
  • 例3:

       Set<Student> setStudents;  
       //or
       Set<Student> studentsSet
    
       Set<Student> specialNeedsStudents;  **YES**
    
    设置特殊需求学生**对**
    

     List<Student> students;
    
    Map<Integer, Student> students;
    
       Set<Student> students;
    
     List<Student> allStudents; **YES**
    
    Map<Integer, Student> students; **NO**
    
       Set<Student> students; **NO**
    
    Set学生**没有**
    

这完全是基于观点的,因此与SO无关。事实上,非常基于观点,但您正在设置选项
studentList
studentSet
studentMap
。无论如何,作为一种意见,答案通常是“否”,除非您能确切说明为什么需要将集合类型添加到名称中。如果您不能给出具体原因,那么默认情况下应该使用
students
。请参阅……显然,如果在同一个/嵌套范围内有一个集合和一个映射,那么您需要有不同的名称,因此,您可以向名称添加
…Set
…Map
。我的意见是,您应该避免向变量名称添加与其在系统中的用途无关的任何内容。特别是当集合的实际类型是要封装的内部实现细节时。但是如果你的名字在其他方面很好(见@OldCurmudgeon的答案),那么在名字后面附加一个不必要的
…List
…Map
并不是世界末日。我会专注于正确使用基本名称,因为这确实会在可读性方面产生巨大的差异。这完全是基于观点的,因此与主题无关。事实上,非常基于观点,但您正在模糊选项
学生列表
学生集
学生地图
。无论如何,作为一种意见,答案通常是“否”,除非您能确切说明为什么需要将集合类型添加到名称中。如果您不能给出具体原因,那么默认情况下应该使用
students
。请参阅……显然,如果在同一个/嵌套范围内有一个集合和一个映射,那么您需要有不同的名称,因此,您可以向名称添加
…Set
…Map
。我的意见是,您应该避免向变量名称添加与其在系统中的用途无关的任何内容。特别是当集合的实际类型是要封装的内部实现细节时。但是如果你的名字在其他方面很好(见@OldCurmudgeon的答案),那么在名字后面附加一个不必要的
…List
…Map
并不是世界末日。我会把注意力集中在正确使用基本名称上,因为这确实会对可读性产生巨大影响。