spring boot 怎么在静态类里引入非静态
时间: 2023-05-08 11:58:37 浏览: 167
在Spring Boot中,静态成员和方法是通过类名直接访问的,而非静态成员和方法是通过创建类的实例对象来访问的。因此,要在静态类中引入非静态的成员或方法,必须先创建非静态成员所属的类的实例对象。
假如我们要在一个静态类中引入一个非静态成员,可以通过以下两种方式来实现。
第一种方式是使用静态工厂方法创建非静态的类的实例对象,并在静态类中引用该实例对象的非静态成员。示例如下:
```java
public class NonStaticClass {
private String value;
public NonStaticClass(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
public class StaticClass {
public static void main(String[] args) {
NonStaticClass obj = NonStaticClass.create("Hello, world!"); // 调用静态工厂方法
System.out.println(obj.getValue());
}
private static NonStaticClass create(String value) { // 静态工厂方法
return new NonStaticClass(value);
}
}
```
第二种方式是将非静态成员声明为静态的,然后在静态类中直接引用该静态成员。示例如下:
```java
public class NonStaticClass {
private static String value;
public String getValue() {
return value;
}
}
public class StaticClass {
public static void main(String[] args) {
NonStaticClass.value = "Hello, world!"; // 直接引用静态成员
System.out.println(new NonStaticClass().getValue()); // 创建实例对象并访问静态成员
}
}
```
需要注意的是,这两种方式各有优劣,应根据具体情况选择。第一种方式适合非静态成员初始化需要参数的情况,但需要额外声明静态工厂方法;第二种方式不需要额外声明静态工厂方法,但需要将非静态成员声明为静态的,可能存在线程安全问题,不适合状态变化比较频繁的场景。