gpt4 book ai didi

java - 在没有实例化的情况下返回对具有静态方法和静态字段的类的引用

转载 作者:行者123 更新时间:2023-11-29 08:43:36 24 4
gpt4 key购买 nike

我想创建一个包装器类,它从一个库提供的类中调用静态方法和成员字段我无法查看代码。

当我需要在特定上下文中使用静态方法时,这是为了避免全局成员字段的样板设置代码。

我想尽量避免为每个静态方法创建包装器方法。

我的问题:

是否可以从一个方法返回一个带有静态方法的类来访问静态方法而不实例化它?

代码在下方,内联注释。

该代码用于演示调用方法 getMath() 时静态值的变化。

我想避免在调用静态方法之前设置值。

StaticMath.setFirstNumber(1);
StaticMath.calc(1);

StaticMath.setFirstNumber(2);
StaticMath.calc(1);

我正在使用 Eclipse IDE,它出现了警告,我理解,但我想避免。

我尝试搜索有关此主题的内容,因此如果有人可以提供链接,我可以关闭此链接。

public class Demo {
// Static Methods in a class library I don't have access to.
static class StaticMath {
private static int firstNum;

private StaticMath() {
}

public static int calc(int secondNum) {
return firstNum + secondNum;
}

public static void setFirstNumber(int firstNum) {
StaticMath.firstNum = firstNum;
}
}

// Concrete Class
static class MathBook {
private int firstNum;

public MathBook(int firstNum) {
this.firstNum = firstNum;
}

// Non-static method that gets the class with the static methods.
public StaticMath getMath() {
StaticMath.setFirstNumber(firstNum);
// I don't want to instantiate the class.
return new StaticMath();
}
}

public static void main(String... args) {
MathBook m1 = new MathBook(1);
MathBook m2 = new MathBook(2);

// I want to avoid the "static-access" warning.
// Answer is 2
System.out.println(String.valueOf(m1.getMath().calc(1)));
// Answer is 3
System.out.println(String.valueOf(m2.getMath().calc(1)));
}
}

最佳答案

我只是将它包装起来以进行原子操作:

public static class MyMath{

public static synchronized int myCalc( int num1 , int num2 ){
StaticMath.setFirstNum(num1);
return StaticMath.calc(num2);
}

}

缺点:您必须确保不使用 StaticMath 来避免这个“桥接”类。

用法:

int result1 = MyMath.myCalc( 1, 1 );
int result1 = MyMath.myCalc( 2, 1 );

关于java - 在没有实例化的情况下返回对具有静态方法和静态字段的类的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38139017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com