Java 编程技术:将对象或值作为方法参数传递
传递参数在日常编程中很常见,但我们应该将参数作为对象或值传递吗 (A) (B)Java 编程技术:将对象或值作为方法参数传递,java,oop,parameter-passing,Java,Oop,Parameter Passing,传递参数在日常编程中很常见,但我们应该将参数作为对象或值传递吗 (A) (B) 根据OOP的概念,我们应该使用对象。但是,不要过度使用它。例如,在您的示例中,我会使用int。但如果我在很多地方使用多个值,我会使用一个对象。 我不会仅仅用一个数据成员“amount”创建一个Payment类 使用适当的OOP,您将在付款对象上拥有大于零的权限,即: class Payment { int amount public boolean isGreaterThanZero() { retu
根据OOP的概念,我们应该使用
对象
。但是,不要过度使用它。例如,在您的示例中,我会使用int
。但如果我在很多地方使用多个值,我会使用一个对象。我不会仅仅用一个数据成员“
amount
”创建一个Payment
类
使用适当的OOP,您将在付款对象上拥有大于零的权限,即:
class Payment {
int amount
public boolean isGreaterThanZero() {
return amount > 0
}
}
然后:
Payment payment
boolean flag = payment.isGreaterThanZero()
我的目标是保持事物的解耦。如果isGreaterThanZero()真正需要的是金额,那么int版本更好,因为它不会将实现与Payment类耦合。这是一个人为的示例,但是如果这是接收类与Payment的唯一交互,我会为了解耦而使用该值。创建多余的类依赖项没有意义
编辑:Marcel和我在同一时间输入了相同的内容。:)这。这个问题的答案将针对特定的情况,因此无法给出明确的答案,但何时使用哪种方法仍然有效 我会在以下情况下传递对象:
当参数很少时,我会传递一个值,并且所有参数都是简单的值类型。我认为我们应该尽可能使用基本类型(int、double、boolean、char)作为参数,因为存在基本类型并非偶然。我更喜欢第二个选项,因为它更通用(它不会强迫您提供支付对象,任何int值都可以)。但是,当您需要对象的状态(对象数据的至少两个值)时,情况可能会发生变化,您可以使用值作为参数以实现更一般的使用可能性,也可以使用对象作为参数以简化操作。假设您问的是参数传递,而不是对象设计
在设计方法时需要考虑多个方面。
在有意义的地方,尽量减少代码中模块之间的依赖关系。在您的示例中,(A)引入了对支付对象不必要的依赖。但是,如果该方法需要支付对象的两个成员变量(因为它是特定于支付的),那么无论如何,将支付对象作为参数传递。有时,将对象地址(或指针、句柄,无论您如何称呼它)作为参数传递,然后在方法中强制转换它(作为所需对象的实例)比将对象作为参数传递更快。这只是一种限制编译方式的方法。如果有时它不会改变任何东西,在其他情况下,传递地址会使程序更快。这是一种低级编译器功能,但确实可以使代码更快。我前面的答案是addnum。这还取决于compiler优化和方法调用上下文。如果对象在方法调用之前已经定义,或者如果它是一个可以从内联和优化中获益的方法,那么使用ADRES不是一个好主意。 如果您处于循环中,那么最好使用地址。
您必须考虑一下该方法将如何在特定程序中使用(=预计它将如何编译)。是的,我们可以在Java程序中将对象作为参数传递。
第一条路 第二条路
您好,假设这是一个业务逻辑,用于检查银行帐户是否有足够的取款金额。我不同意在系统的模型层中编写业务逻辑。如果它严格与一个域对象一起工作,并且不受任何其他影响,则它属于域对象。您还会将该方法放在哪里。在服务中esn没有意义,因为它不仅限于服务。在实用程序类中是不正确的,因为静态实用程序不是好的OOP(有时是必要的,但不是理想的选择)在本例中,该方法被赋予一个对象,并通过调用该对象上的方法返回一个答案。没有使用任何其他方法…因此它属于该对象。但该方法看起来像一个通用方法。我们很可能在一个Util类中有一个静态方法来进行泛型比较。您对此有何想法?嗨,这是唯一的你可以举一个简单的例子来回答我的问题。=)嗨,你能再详细说明一下吗。如果有太多的参数要传递给方法,我想最好将它们封装在一个对象和进程中。@liangteh当然。你有没有什么特别的部分需要我详细说明?+1用于封装“太多的参数”。绝对是一种代码味道。我同意SlippedSmurf的观点,在理想情况下,你将拥有所有的基本类型(或者更好的是,根本没有参数),但有时它根本没有意义——没关系,只要确保方法和对象之间的“耦合”是逻辑的。你在说什么语言?在Java中,总是传入对对象的引用,而不是对象本身。你说的是传递对象副本而不是对象副本的语言吗
class Payment {
int amount
public boolean isGreaterThanZero() {
return amount > 0
}
}
Payment payment
boolean flag = payment.isGreaterThanZero()
class demo
{private int length=1;
private int breadth=1;
private int area;
void input(int length,int breadth)
{
this.length=length;
this.breadth=breadth;
}
void add(demo d1,demo d2)
{
length=d1.length+d2.length;
breadth=d1.breadth+d2.breadth;
}
void output()
{
System.out.println("\nLength="+length+"\nBreadth="+breadth);
}
public static void main(String args[])
{
demo d1=new demo();
demo d2=new demo();
d1.input(1, 1);
d1.output();
d2.input(2, 2);
d2.output();
demo d3=new demo();
d3.add(d1, d2);
d3.output();
}
}
class demo
{private int length;
private int breadth;
void input(int length,int breadth)
{
this.length=length;
this.breadth=breadth;
}
demo add(demo d2)
{ demo obj=new demo();//Neccesary as we want to return complete
object irrespective of its number of data fields
obj.length=length+d2.length;//Storing the length of two objects
in the obj
obj.breadth=breadth+d2.breadth;
return obj;
}
void output()
{
System.out.println("\nLength="+length+"\nBreadth="+breadth);
}
public static void main(String args[])
{
demo d1=new demo();
demo d2=new demo();
d1.input(1, 1);
d2.input(2, 2);
demo d3=d1.add(d2);//Here we created new object d3 called
add() by d1 and passed d2 object through it
d3.output();
}
}