当我更改方法中的参数时,调用相同方法的其他 类 会受到干扰
When I change arguments in a method other classes which are calling same very method get disturbed
我现在有三个 class 一个是主要的 class,
Class答:
class A{
int result;
int getHeightBase() {
return result;
}
void setHeightBase(int h, int b) {
result=h*b;
}
}
Class乙:
此 class 将执行与 A
不同的计算
class B{
int result;
int getHeightBase() {
return result;
}
void setHeightBase(int h, int b) {
result=12*h*b;
}
}
主要Class:
public class Main {
public static void main(String[] args) {
A a= new A();
B b= new B();
calculateArea(a,b);
}
void calculateArea(A obj1, B obj2){
obj1.setHeightBase(5,6);
obj2.setHeightBase(5,6);
}
}
现在,当我更改 class A 方法 setHeightBase 或 class B 方法 setHeightBase 的参数时出于某种原因,我必须在 MainClass 以及我发送整数值的地方进行更改,我认为这与设计模式背道而驰,谁能指导我如何摆脱它,我想稍后更改参数但是我不想影响任何其他 class 或更改任何其他 class,我尝试使用界面但没有得到如何摆脱这个问题
提前致谢,如有任何帮助,我们将不胜感激
可以使用方法重载,
void setHeightBase(int h, int b) {
result=12*h*b;
}
void setHeightBase(double h, double b) {
result=12.0*h*b;
}
这将保存之前的方法并创建一个具有准确名称和不同参数的方法。
假设你有这个 class:
public void printNumbers(int one, int two) {
int result = one + two;
System.out.println("result = " + result);
}
这是从多个其他 classes 调用的。您不能只更改签名(返回类型、方法名称、参数列表)并期望一切正常。
现在,假设您不希望它自动打印总和,但您希望能够选择执行加法或减法的操作。
对于当前的方法,不要改变任何东西。它被用于添加。因此,您将添加一个重载方法,它接受一个附加参数:
public void printNumbers(int one, int two) {
int result = one + two;
System.out.println("result = " + result);
}
public void printNumbers(int one, int two, String action) {
// action is either add or sub
if ( !"add".equals(action) && !"sub".equals(action) ) {
System.out.println("Error");
} else if ("add".equals(action) {
int result = one + two;
System.out.println("result = " + result);
} else {
int result = one - two;
System.out.println("result = " + result);
}
}
完成后,您可以将原始方法更改为:
public void printNumbers(int one, int two) {
printNumbers(one, two, "add");
}
public void printNumbers(int one, int two, String action) {
// action is either add or sub
if ( !"add".equals(action) && !"sub".equals(action) ) {
System.out.println("Error");
} else if ("add".equals(action) {
int result = one + two;
System.out.println("result = " + result);
} else {
int result = one - two;
System.out.println("result = " + result);
}
}
并且曾经提供的功能将保持不变,而您不必更改任何其他现有代码
我会使用抽象 class 作为基础,并从中扩展其他 classes。抽象 class 中的 public 方法将作为与外界的契约。将来,如果您想公开其他方法,您可以将它们添加到接口中,并根据功能提供默认实现。在现实世界场景中,您可以避免更改现有合同。
举个例子,你的classes可以这样写
abstract class Shape{
int height;
int base;
Shape(int height, int base){
super();
this.height = height;
this.base = base;
}
public int area(){
return height * base;
}
}
class Shape1 extends Shape{
Shape1(int height, int base){
super(height, base);
}
}
class Shape2 extends Shape{
Shape2(int height, int base){
super(height, base);
}
@Override
public int area(){
return 12 * height * base;
}
}
public class Test{
public static void main(String args[]){
Shape s1 = new Shape1(2,3);
Shape s2 = new Shape2(2,3);
System.out.println(s1.area());
System.out.println(s2.area());
}
}
我现在有三个 class 一个是主要的 class,
Class答:
class A{
int result;
int getHeightBase() {
return result;
}
void setHeightBase(int h, int b) {
result=h*b;
}
}
Class乙:
此 class 将执行与 A
不同的计算class B{
int result;
int getHeightBase() {
return result;
}
void setHeightBase(int h, int b) {
result=12*h*b;
}
}
主要Class:
public class Main {
public static void main(String[] args) {
A a= new A();
B b= new B();
calculateArea(a,b);
}
void calculateArea(A obj1, B obj2){
obj1.setHeightBase(5,6);
obj2.setHeightBase(5,6);
}
}
现在,当我更改 class A 方法 setHeightBase 或 class B 方法 setHeightBase 的参数时出于某种原因,我必须在 MainClass 以及我发送整数值的地方进行更改,我认为这与设计模式背道而驰,谁能指导我如何摆脱它,我想稍后更改参数但是我不想影响任何其他 class 或更改任何其他 class,我尝试使用界面但没有得到如何摆脱这个问题 提前致谢,如有任何帮助,我们将不胜感激
可以使用方法重载,
void setHeightBase(int h, int b) {
result=12*h*b;
}
void setHeightBase(double h, double b) {
result=12.0*h*b;
}
这将保存之前的方法并创建一个具有准确名称和不同参数的方法。
假设你有这个 class:
public void printNumbers(int one, int two) {
int result = one + two;
System.out.println("result = " + result);
}
这是从多个其他 classes 调用的。您不能只更改签名(返回类型、方法名称、参数列表)并期望一切正常。
现在,假设您不希望它自动打印总和,但您希望能够选择执行加法或减法的操作。
对于当前的方法,不要改变任何东西。它被用于添加。因此,您将添加一个重载方法,它接受一个附加参数:
public void printNumbers(int one, int two) {
int result = one + two;
System.out.println("result = " + result);
}
public void printNumbers(int one, int two, String action) {
// action is either add or sub
if ( !"add".equals(action) && !"sub".equals(action) ) {
System.out.println("Error");
} else if ("add".equals(action) {
int result = one + two;
System.out.println("result = " + result);
} else {
int result = one - two;
System.out.println("result = " + result);
}
}
完成后,您可以将原始方法更改为:
public void printNumbers(int one, int two) {
printNumbers(one, two, "add");
}
public void printNumbers(int one, int two, String action) {
// action is either add or sub
if ( !"add".equals(action) && !"sub".equals(action) ) {
System.out.println("Error");
} else if ("add".equals(action) {
int result = one + two;
System.out.println("result = " + result);
} else {
int result = one - two;
System.out.println("result = " + result);
}
}
并且曾经提供的功能将保持不变,而您不必更改任何其他现有代码
我会使用抽象 class 作为基础,并从中扩展其他 classes。抽象 class 中的 public 方法将作为与外界的契约。将来,如果您想公开其他方法,您可以将它们添加到接口中,并根据功能提供默认实现。在现实世界场景中,您可以避免更改现有合同。
举个例子,你的classes可以这样写
abstract class Shape{
int height;
int base;
Shape(int height, int base){
super();
this.height = height;
this.base = base;
}
public int area(){
return height * base;
}
}
class Shape1 extends Shape{
Shape1(int height, int base){
super(height, base);
}
}
class Shape2 extends Shape{
Shape2(int height, int base){
super(height, base);
}
@Override
public int area(){
return 12 * height * base;
}
}
public class Test{
public static void main(String args[]){
Shape s1 = new Shape1(2,3);
Shape s2 = new Shape2(2,3);
System.out.println(s1.area());
System.out.println(s2.area());
}
}