我有一个类,它是一个示例代码,而不是真正的代码
private static String className;
public static Wish getInstance(Class<?> clazz) {
if(wish == null)
wish = new Wish();
className = clazz.getName();
return wish;
}
许多课程都使用这个Wish
课程,然后每个课程应该&#34;说&#34;使用className
方法传递getInstance
的愿望。
然后我有类似的东西
public class Boy {
private Wish w = Wish.getInstance(Boy.class);
//at this moment the static variable take "com.package.Boy" value
....
}
另一个班级
public class Girl {
private Wish w = Wish.getInstance(Girl.class);
//at this moment the static variable take "com.package.Girl" value
....
}
当每个人开始说出他们的愿望时,例如
public class WishesDay {
private Girl g;
private Boy b;
public void makeYourWish() {
g = new Girl(); //get the com.package.Girl value
b = new Boy(); //get the com.package.Boy value
//sample output "com.package.Boy wants A pink house!"
g.iWish("A pink house!"); // the boys don't want this things :(
b.iWish("A spatial boat!");
}
}
我知道每个对象与Wish
类具有相同的副本,并且当每个对象(className
)调用Girl, Boy
方法时,静态变量Wish.getInstance(Class<?> clazz)
会发生变化。< / p>
如何使用静态变量(我希望避免实例化Wish类)并为变量className
保留正确的值。
我可以使用静态变量进行此操作吗?或解决方案是实例化(无静态变量)
例如,log4j
有Logger
类,我想用类名做同样的事情。
答案 0 :(得分:1)
如果您想避免实例化Wish类并使className不是静态的,那么您必须将构造函数设为私有。
public class Wish {
String className;
private Wish(String className){
this.className = className;
}
public static Wish getInstance(Class<?> clazz) {
String className = clazz.getName();
return new Wish(className);
}
public String getClassName() {
return className;
}
}
package com.test;
public class WishesDay {
private Girl g;
private Boy b;
public void makeYourWish() {
g = new Girl(); //get the com.package.Girl value
b = new Boy(); //get the com.package.Boy value
//sample output "com.package.Boy wants A pink house!"
g.iWish("A pink house!"); // the boys don't want this things :(
b.iWish("A spatial boat!");
}
public static void main(String[] args) {
WishesDay wd = new WishesDay();
wd.makeYourWish();
//outputs com.test.Girl wants A pink house!
//com.test.Boy wants A spatial boat!
}
}