编写最佳实践所需的建议

时间:2011-03-18 10:23:30

标签: java coding-style

我想了解以下编码习惯是好还是坏。

我将一个Value Object作为参数传递给方法,并且被调用的方法返回相同的参数Value Object。我特别认为,因为它引用了相同的对象,所以我们不需要将它作为返回类型。

Class A
{
  initStudent()
  {
    Student studentObj = new Student();
    //do some processing

    studentObj = processStudent(studentObj);
  }

  processStudent(Student pObj)
  {
    //do something

    return pObj;
  }
}

6 个答案:

答案 0 :(得分:3)

有时需要获取参数并返回相同类型的参数,即使由于某些原因操作在参数上也是如此:
1。如果对象是不可变的(即字符串)
2。如果对象实际可以更改(一个很好的例子是<T>[] List.toArray(<T>[]),如果参数数组中没有足够的空间,则创建一个新的,否则,数组写在参数上)
3。它还隐式告诉用户可能会更改值...
4。如果需要,不要害怕这样做,很多项目都使用它(即Apache Lucene)

答案 1 :(得分:1)

是的,你不应该归还它。正确使用访问修饰符和返回类型。

public class A
{

  public Student initStudent()
  {
     Student studentObj = new Student();
     //do some processing

     processStudent(studentObj);

     return studentObj;
  }

  private processStudent(Student pObj)
  {
       //do something
  }
}

答案 2 :(得分:1)

确实你不需要归还物体。什么也不回报。

Class A
{

  void initStudent()
  {
     Student studentObj = new Student();
   //do some processing
    processStudent(studentObj);
  }

 private void processStudent(Student pObj)
   {
       //do something
   }

}

编辑:另外,正如adarshr指出的那样,如果没有&#34;出去&#34;你创建的Student对象将毫无用处。 initStudent()方法。可能您可能想要返回它,或将其存储在Collection实例字段中。

答案 3 :(得分:1)

我认为如果方法修改它,返回对象是一个好习惯。因此,该方法的签名清楚地表明该对象被修改,并且您没有隐含的副作用。

如果该方法不是为了修改对象,则不应该返回它。

答案 4 :(得分:0)

如何将studentObj设置为成员变量,因为它是同一个类

编辑:我想processStudent会在Student上调用一些方法,称为feature envy - 该方法'希望在Student中'。这不是一个好习惯,而是通过创建新方法

在Student类中创建处理

答案 5 :(得分:0)

我宁愿瞄准依赖注入并结合decorator design pattern

在主要代码中,我将处理学生初始化并传递它以进行装饰

studentObj = new Student();

decoratedStudentObj = new A(studentObj);

finalStudentObj = decoratedStudentObj.getStudent()

这将触发所有不同类中的getStudent()方法并修改casacade中的所有学生对象。

所以你最终可能会得到这样的结果:

studentObj = new Student();

decoratedStudentObj = new A(studentObj);

decoratedStudentObj = new A(decoratedStudentObj );

decoratedStudentObj = new B(decoratedStudentObj);

decoratedStudentObj = new C(decoratedStudentObj );

finalStudentObj = decoratedStudentObj.getStudent()

依赖注入的另一个优点是允许您定义不同的学生类型,只要所有学生对象实现相同的接口/方法集,您就必须复制任何代码

IE:

studentObj = new Student()

decoratedStudentObj = new A(studentObj);

finalStudentObj = decoratedStudentObj.getStudent()


highSchoolStudentObj = new HighSchoolStudent()

decoratedHighSchoolStudentObj  = new A(highSchoolStudentObj);

decoratedHighSchoolStudentObj = new B(decoratedHighSchoolStudentObj );

finalHighSchoolStudentObj   = decoratedHighSchoolStudentObj .getStudent()


collegeStudentObj = new CollegeStudent()

decoratedCollegeStudentObj  = new A(collegeStudentObj );

decoratedCollegeStudentObj  = new C(decoratedCollegeStudentObj);

finalCollegeStudentObj  = decoratedCollegeStudentObj.getStudent()

最后,它更容易实现UnitTesting,因为您可以轻松地模拟学生类以独立地测试您的处理类。