Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用哪种方法_Java_Bluej - Fatal编程技术网

Java 使用哪种方法

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

假设我有一个类myClass,它有两个方法-addOne()和addTwo()

我还有一节课,加上。这个类有一个实例布尔变量,一个或两个。此变量决定对myClass对象使用addOne()还是addTwo()

我已经编写了所有使用addOne()方法的代码行,其中有很多行。我不想做的是复制它们,像这样:

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());