2014-12-07 33 views
0

我有以下代码:是修改输入参数并返回错误的方法吗?

public class MyClass 
{ 
     .... 
} 

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
return myinstance; 
} 

在我看来,那久违MYINSTANCE实际上并没有做任何事情,在这里,换句话说这一点,实现了与上面相同的代码(只要MYINSTANCE未分配在方法的另一个对象):

public static void MyClassModifier(MyClass myinstance) 
{ 

    ...... 

} 

我可以,当然,这样做:

public static MyClass MyClassModifier(MyClass myinstance) 
{ 

    ...... 
    return new MyClass(); 
} 

但这似乎很笨重,如果MyClass的构造函数有很多参数,这会变得非常笨重,所以问题是,哪一个更可取,为什么?

从函数式编程的角度来看,似乎最后一个是要走的路,但我不确定这是最好的方法。

回答

1

是修改输入参数并返回错误的方法吗?

是的。它们是误导性的 - 客户端会假设您的方法读取输入参数,创建一个新对象并将其返回。事实上,事情并非如此。返回值的输入值,并且客户端无需捕获它。

关于你的第二个问题,你应该改变输入值还是创建一个新值,答案很大程度上取决于你试图达到的目标。没有任何背景下给你一个更好的答案是不可能的。

从函数式编程的角度来看,似乎最后一个是要走的路,但我不确定这是最好的方法。

是的,在函数式编程中你想要不可变的状态 - 这意味着MyClass不能被修改,所以你必须返回一个新的实例。

+0

感谢您的回答,这几乎是我想象的。 关于变异输入值vs创建一个新的例子,我实际上想到的例子包括一个List作为输入值 – ManyRootsofAllEvil 2014-12-07 18:49:26