我想創建一個包裝類,該類從庫提供的類中調用靜態方法和成員字段我無法查看代碼。沒有實例化返回對具有靜態方法和靜態字段的類的引用
這是爲了避免當我需要在特定上下文中使用靜態方法時全局成員字段的樣板設置代碼。
我想盡量避免爲每個靜態方法創建包裝方法。
我的問題:
是否有可能從方法返回靜態方法的類來訪問只是靜態方法沒有實例呢?
代碼如下,並附帶註釋。
該代碼用於演示方法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)));
}
}
爲什麼不'StaticMath.calc(1)' –
這種設計(設置'firstNum')是壞的,只有靜態方法的類應該是無狀態 –
@JoopEggen當M1和m2被實例化,'firstNum'值分別被設置爲1和2。問題是我需要在調用'StaticMath.calc()'之前調用'StaticMath.setFirstNumber()'。 – JasonTolotta