急:有什么办法将这个singleton的class ,制造多个instances。

PandaIT 2010-03-26 01:56:17


public class Singleton { private Singleton(){ System.out.println(" singleton "); }
private static Singleton s = new Singleton(); public static Singleton getInstance(){ return s; } }
public class Singleton {
private Singleton(){
System.out.println(" singleton ");
}
private static Singleton s = new Singleton();
public static Singleton getInstance(){
return s;
}
}

...全文
123 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
反射。。。
longtenggdf 2010-03-26
  • 打赏
  • 举报
回复
私有构造函数的调用:
主要的类:java.lang.reflect.Constructor

首先要拿到构造方法,具体如下:
Class clazz = Class.forName("Bean");
Constructor[] cons = clazz.getDeclaredConstructors();
这样拿到的cons数组保存着所有的这个类的构造函数,包括私有的和公有的。
迭代并调用con.toGenericString()可以拿到每个构造方法的全限定名(带修饰符,带参数)。
如果要拿单个构造方法,可以调用getDeclaredConstructor(Class args);来拿,只要参数匹配了就可以得到,如果没有参数,则传null即可。

然后需要调用Constructor的方法setAccessible设置为true,表示允许使用私有构造函数。这个方法是父类 AccessibleObject的方法,这个类的自类有Constructor, Field, Method分别代表构造函数,成员变量,和成员方法。也就是说使用这个方法,可以访问类的所有的方法、变量、构造函数。

最后,使用Constructor的newInstance方法就可以把对象创建出来了:
Bean bean = (Bean)con.newInstance(Object args);
没有参数的构造函数可以传null进去。
  • 打赏
  • 举报
回复
class Singleton {
private Singleton() {
System.out.println(" singleton ");
}

private static Singleton s = new Singleton();

public static Singleton getInstance() {
return new Singleton(); // 改成 new 一个实例就可以了
}
}
soli11722984 2010-03-26
  • 打赏
  • 举报
回复
LZ好歹排个版啊

[Quote=引用 2 楼 xyz20003 的回复:]
用暴力反射创建多个实例。
[/Quote]

UPUPUP
临远 2010-03-26
  • 打赏
  • 举报
回复
用暴力反射创建多个实例。
临远 2010-03-26
  • 打赏
  • 举报
回复
反射就可以。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧