很多框架和源码中都会有Holder这种类,主要作用就是让java中参数传递的时候可以保证引用改变。
例如:
public class Test {
public static void main(String[] args) {
User user = new User();
user.name = "1111";
change(user);
System.out.println(user.name);
}
public static void change(User user){
user = new User();
user.name = "2222";
}
}
class User{
String name;
}
我们执行后结果为1111
但是应用Holder类就不一样了
public class Test {
public static void main(String[] args) {
User user = new User();
user.name = "1111";
Holder<User> holder = new Holder<>();
holder.setValue(user);
change(holder);
System.out.println(holder.getValue().name);
}
public static void change(Holder<User> holder){
User user = new User();
user.name = "2222";
holder.setValue(user);
}
}
class User{
String name;
}
class Holder<T>{
T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
执行结果为2222