讨论:两种使用另外一个类的变量的方法。。。

gzyip 2004-04-24 12:23:11
有两种方法可以使用另外一个类的变量,用哪一种好?什么时候用哪一种???
一种是:
//way1.java
public class way1 {
public static void main(String[] args) {
test1 t=new test1();
System.out.println(test1.instance.i);
}
}

class test1 {
static test1 instance;
int i=10;

public test1(){
instance=this;
}
}

另一种方法:
//way2.java
public class way2 {
test2 test;
int i;

public static void main(String[] args) {
way2 way=new way2();
test2 test=new test2(way);
System.out.println(way.i);
}
}

class test2 {
way2 way;

public test2(way2 w){
way=w;
w.i=10;
}
}

欢迎各位讨论...一个星期结帖...
...全文
57 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
appleangle 2004-04-25
  • 打赏
  • 举报
回复
学习
alienbat 2004-04-25
  • 打赏
  • 举报
回复
没听说过在单一的一次事件监听中会传送几十条不同类型的数据。你要考虑一下自己的设计是否有问题。
BigBangBug 2004-04-25
  • 打赏
  • 举报
回复
具体问题具体分析,你说的那3中方法都要根据具体的情况不同而运用,能达到逻辑上的清晰就可以了,没必要拘泥于一定用哪种方法。
如果不同类型的多个数据可以采取1。直接传递。2。包装为一个类传送。3。如果是网络计算的情况,可以使用xml打包或者串行化。等等
gzyip 2004-04-25
  • 打赏
  • 举报
回复
如果不同类型的呢???
假设你全部转为String,全部加到一个数据里面,还不是一样麻烦???
gzyip 2004-04-25
  • 打赏
  • 举报
回复
JavaVsNet(JavaVsNet):
能不能具体说一下在什么情况下使用哪种办法?
Schlemiel 2004-04-24
  • 打赏
  • 举报
回复
可以给第一种方法一个简单的评价:脱了裤子放屁。
第二种方法就显得有点莫名其妙,test2这个class是干什么用的?
Schlemiel 2004-04-24
  • 打赏
  • 举报
回复
to alienbat(亡灵法师):

静态导入是有用的。现在常用的一种定义常量的方式是常量接口(constant interface),把你需要用的常量定义在一个接口里面,谁要用这些常量就继承这个接口。比如
public interface MathConstantsAware {
public static final double PI = 3.1415926535;
...

如果有个类要使用这些数学常量:
public class Circle implements MathConstantsAware {
public double getArea(double r) {
return 2*r*r*PI;
}
...

但这是不好的做法。“从哪里得到PI值”应该是“圆形”类的实现细节,不应该暴露给它的client知道的,但这个circle类就从接口上暴露了自己的实现细节。static import就是要避免使用constants interface的。
bigcrazy 2004-04-24
  • 打赏
  • 举报
回复
尽量用依赖而不是关联。
你的方法一,没什么意义,最好就是类对象自己提供get/set方法操作数据成员。
你的方法二更是垃圾,两个类相互关联,犯了OO的大忌。
alienbat 2004-04-24
  • 打赏
  • 举报
回复
to 楼主
你展示的第一种方法是一个写得非常破的单例模式。
第二种方法复杂且无聊。

最好的方法是:
new SomeClass().getXXX();

moke33(勤奋的菜鸟)
J2SE 1.5的静态导入没啥意思。无非就是让你少打几下键盘而已。
ai92 2004-04-24
  • 打赏
  • 举报
回复
我觉得好像只有这两个办法可以使类B能使用或修改类A的一个对象中的变量...

class A
{
private int a=1;
public int geta()
{
return a;
}
}


public class B
{
public static void main(String[] agr)
{
A aa=new A();
int i=aa.geta();//这不就得到了a了吗?
}
}
真的不知道楼主到底为什么要这样写
你的两个方法都和提高可读性的规范相去甚远了。
moke33 2004-04-24
  • 打赏
  • 举报
回复
呵呵,不好意思我没搞明白楼主的意思,可能是脑子太钝了

如果是静态常量的话就用jdk1.5的新特性,静态导入
import static xxx.xx.oo
呵呵,让你疯狂
moke33 2004-04-24
  • 打赏
  • 举报
回复
静态工厂?
alienbat 2004-04-24
  • 打赏
  • 举报
回复
不懂楼上的什么意思。如果数据有几十条,传个数组不就得了。
caiyanying732 2004-04-24
  • 打赏
  • 举报
回复
来学习了
gzyip 2004-04-24
  • 打赏
  • 举报
回复
ai92(抵制日货^o^):
不是从书上抄来的...
我觉得好像只有这两个办法可以使类B能使用或修改类A的一个对象中的变量...
gzyip 2004-04-24
  • 打赏
  • 举报
回复
Schlemiel(维特根斯坦的扇子):
可能是我的例子写得不好吧...
第二个例子的类test2就是为了演示,用类B修改类A的一个对象里面的值...
gzyip 2004-04-24
  • 打赏
  • 举报
回复
...不好意思啊...语文学的不是很好...
第一种方法:就是在类A里面为类A建立一个静态实例,然后类B通过使用实例,来使用类A的变量.
第二种方法:就是类A在调用类B的构造函数的时候,把类A的一个对象作为参数传过去,供类B访问类A的变量.

ER...希望我现在这样说,各位能明白吧...
如果各位还是不明白...那么我去重修大学语文算了...呵呵...
gzyip 2004-04-24
  • 打赏
  • 举报
回复
为什么每个人都说,这两个方法没用???
例如有,两个frame——frame1和frame2,frame1负责让用户输入信息,frame2负责显示处理后的结果。。。
那么frame1在接受完信息,用户click按钮OK的之后,处理数据可以用3个办法:
1 在frame1里面处理
2 另外写一个类处理
3 在frame2里面处理
假设处理前后的数据都有数十条,难道你真的为每一个数据都写一个get???
如果数据在frame1的按钮事件中处理,那么数十条结果怎样传到frame2???
如果数据不在Class frame1中处理,在其他Class中处理,数十条原始数据怎样全部传出去???
ai92 2004-04-24
  • 打赏
  • 举报
回复
说实话,这两个方法我认为没一个好的
不知道你是从哪本书上拿来的
我觉得如果是用来掌握一些语法的特性,还说得过去 ,不然如果是在真实的程序中…………
实在是可读性太差,成了高耦合,低内聚了,跟软件工程正好相反

如果楼主的意思没有表达清楚,麻烦再说一遍
kasad 2004-04-24
  • 打赏
  • 举报
回复
學習中
加载更多回复(4)

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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