Java 使用哪种方法
假设我有一个类myClass,它有两个方法-addOne()和addTwo() 我还有一节课,加上。这个类有一个实例布尔变量,一个或两个。此变量决定对myClass对象使用addOne()还是addTwo() 我已经编写了所有使用addOne()方法的代码行,其中有很多行。我不想做的是复制它们,像这样:Java 使用哪种方法,java,bluej,Java,Bluej,假设我有一个类myClass,它有两个方法-addOne()和addTwo() 我还有一节课,加上。这个类有一个实例布尔变量,一个或两个。此变量决定对myClass对象使用addOne()还是addTwo() 我已经编写了所有使用addOne()方法的代码行,其中有很多行。我不想做的是复制它们,像这样: if (oneOrTwo) { // all lines of code for addOne() } else { //all lines of code for addTwo() } ad
if (oneOrTwo)
{
// all lines of code for addOne()
}
else
{
//all lines of code for addTwo()
}
addOne()的代码行中包含了大量的myClass.addOne()调用(当然,我已经创建了一个新对象,并且一切都很好地工作,但我在这里说的是一般性的,以避免使这篇文章成为不必要的大文章)。
我的问题是,我是否可以做以下事情:
if (oneOrTwo)
addNumber() = addOne();
else
addNumber() = addTwo();
然后,我可以使用myClass.addNumber()而不是使用myClass.addOne()或myClass.addTwo(),在
myClass
中可以有一个名为add(布尔一)
的方法,例如:
public double add(boolean one) {
return (one) ? addOne() : addTwo();
}
您可以通过以下方式调用该方法:
myClass.add(adding.oneOrTwo);
(如果字段
one或two
是私有的,则可能需要相关的getter方法。)这就是三元运算符的作用:
addNumber = oneOrTwo? addOne : addTwo;
考虑继承和策略模式 使用一个方法addNumber()创建抽象超类: 创建两个子类,每个子类都有自己的addNumber()实现: 在主类中创建一个以AddNumber对象为参数的方法:
public class MyClass() {
public void add(AddNumber addNumber) {
addNumber.addNumber();
}
// other MyClass stuff
}
然后,如果需要向类中添加一个对象,只需使用AddOne对象作为参数调用add()。类似地,如果需要添加两个对象,则使用AddTwo对象作为参数调用add()
myClass.add(new AddOne());
myClass.add(new AddTwo());
这称为策略模式,是解决此类问题的常见设计解决方案 为什么不尝试继承?什么是
addNumber
?您正在尝试将函数分配给函数吗?顺便说一句,一般来说,用布尔标志来做一件或另一件事情并不是很干净。一个方法应该做一件事,而且只能做一件事。
public class MyClass() {
public void add(AddNumber addNumber) {
addNumber.addNumber();
}
// other MyClass stuff
}
myClass.add(new AddOne());
myClass.add(new AddTwo());