好久没来了,心生雅兴,出一小题为难下大家假设A.getB中123 为随机数
不能修改B.getC 方法 ,不能修改A.getB 方法
怎么修改A中的getC 标记处,让整个程序执行时打印这个随机数
需考虑线程安全public class A {
private static A a=null;
private A(){
}
public synchronized static A getInstance(){
if (a==null) {
a=new A();
}
return a;
}
public B getB(){
B b=new B();
b.s="123";
return b;
}
public C getC(){
C c=new C();
//此处可修改
return c;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a=A.getInstance();
B b=a.getB();
C c=b.getC();
System.out.println(c.s);
}
}
public class B {
String s="ttt";
public C getC() {
A a=A.getInstance();
C c=a.getC();
return c;
}
}
public class C {
String s="1234";
}
不能修改B.getC 方法 ,不能修改A.getB 方法
怎么修改A中的getC 标记处,让整个程序执行时打印这个随机数
需考虑线程安全public class A {
private static A a=null;
private A(){
}
public synchronized static A getInstance(){
if (a==null) {
a=new A();
}
return a;
}
public B getB(){
B b=new B();
b.s="123";
return b;
}
public C getC(){
C c=new C();
//此处可修改
return c;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a=A.getInstance();
B b=a.getB();
C c=b.getC();
System.out.println(c.s);
}
}
public class B {
String s="ttt";
public C getC() {
A a=A.getInstance();
C c=a.getC();
return c;
}
}
public class C {
String s="1234";
}
解决方案 »
- maven打的包里为什么有的lib是snapshot,有的是带时间戳的?
- 急!急!急!spring中集成acegi框架后无法上传!!
- 将List<double>中的值取出来放到这个 double date[][]=new double[][]中
- SOS list比较问题
- 今天在IT培训评价网发现两篇好文章
- 在线等!!hibernate问题
- Struts的FormBean读单选框,多选框的value是什么类型?
- ql语句问题,不会得看看,会的说说,谢谢了
- 一個socket方面的問題
- 如何读取ini文件
- preparedstatement.setXXX(col++,xxx)的问题
- strust2 标签问题~~
public class A {
private static A a=null;
private A(){
}
public synchronized static A getInstance(){
if (a==null) {
a=new A();
}
return a;
}
public B getB(){
B b=new B();
Random random = new Random();
b.s=random.nextInt()+"";
return b;
}
public C getC(){
C c=new C();
//此处如何获取调用的 b.s
return c;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a=A.getInstance();
B b=a.getB();
C c=b.getC();
System.out.println(b.s.equals(c.s));
}
}使打印始终为true
这样行不?我都不知道你可以改的范畴。
可以修改A 及A.getB方法 但要严格考虑线程安全
以一种简单的方式实现
在A.getB中将对象A保存起来
然后再A。getC中获取
然后反射即可
当然,这之中也有一个算法,需要考虑线程安全
嘿嘿
public synchronized static A getInstance(){
if (a==null) {
a=new A();
}
return a;
}
这里本来就是线程安全的 取出的a就是一直用的那个A
在A.getB中将对象A保存起来
这个就不说保存的多余了 你保存A 在反射和b.s有关系吗? 反射就是invoke这个方法 我都有a对象了 我还反射做什么?反射做什么?????
如果你想说把B保存到a的某个field中 你不懂getb方法你怎么保存
就是说要在a.getC()中获得getB()中的哪个值;估计要从memory去抓了,应该涉及到很低层的调用巴。
现在放宽要求,要求在保留原来的用户操作流程操作行为习惯的前提下可以对各方法进行修改
不能传递b的对象实例
使用代理,在代理中管理类的实例
或者直接在jvm中取出类实例
……