日期:2014-05-20  浏览次数:20645 次

今天看别人写的代码我感觉好高深,分享下
他创建一个类对象有个属性是集合,反过来又用集合添加了这个类对象,我以为不能这么做呢,结果运行通过了,可是我觉得这和java的抽象哲学相违背啊。就好像人这个类里张三的身高属性又包含了张三这个类对象一样,你们怎么看呢,大家一起讨论下么
java

------解决方案--------------------
集合添加的类型是这个类本身,从内存上看,他集合只是添加了个壳子而已。壳子和类都是同一块内存
------解决方案--------------------
引用:
引用:引用:
他创建一个类对象有个属性是集合,反过来又用集合添加了这个类对象,我以为不能这么做呢,结果运行通过了,可是我觉得这和java的抽象哲学相违背啊。就好像人这个类里张三的身高属性又包含了张三这个类对象一样,你们怎么看呢,大家一起讨论下么
              
     ……


LinkedList是用双向链表实现的,就像火车一样
每一个java.util.LinkedList.Entry对象,就像是一个火车车厢,每一个Entry对象都有前一个Entry的引用,和后一个Entry的引用,每一个Entry通过这两个引用来确定自己的位置。就好象排队的时候,你只要记得前面和后面的人是谁就可以了。
源码如下:

private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;

------解决方案--------------------
我这里也有类似的聊天程序: http://raysmond.com/article/71
------解决方案--------------------
引用:
是同一个类,不是同一个对象吧?


可以是同一个对象:
public class myTest {
ArrayList<myTest> al=new ArrayList<myTest>();
public void showMsg(){ //定义个方法
System.out.println("bbbbbbbbb");
}

public void add(myTest m){ //定义自己增加自己
al.add(m);
m.showMsg();
}
public static void main(String args[]){

myTest m=new myTest();
for(int i=0;i<10;i++){
m.add(m);//使用自己的方法增加自己10遍
}

这不就是类对象的方法属性增加自己当前这个对象,但是内存还是一块,我理解就是一个引用多了个壳子句柄而已。
------解决方案--------------------
就是提供了一块集合空间,存储了N多对象,每个对象又需要实时从这集合中的其他对象获取信息,没有合适的位置让集合成为全局变量进行共享,因此在添加对象的同时,把集合的索引地址传递到对象内部方便访问的应变方法。
------解决方案--------------------
你的举例从现实逻辑上分析确实很不妥,但是,计算机确实能够这么做。
因为人这个类,人拥有以宠物狗,狗也有高度,这个其实是一样的问题。
类比的不是很恰当,不过还是那个意思喔
------解决方案--------------------
比如说张三,他一个属性是亲戚[],然后这里面包含了李四、王五、赵六。
但是他们都是People这个类的对象。。
------解决方案--------------------
这个不是号称 观察者模式 吗
------解决方案--------------------
这不就是自定义集合吗?
------解决方案--------------------
引用:
这不就是自定义集合吗?
额。。也不能这么说,还不到集合的程度。感觉像。
------解决方案--------------------
楼主要用过struts2 的VO和标签
你就没必要这么大惊小怪了!!!
------解决方案--------------------
没有违背,比如说张三怀孕了,肚子就是张三的一个属性,肚子中有一个校长三
------解决方案--------------------
肚子中有个小张三
------解决方案--------------------
JUnit框架中TestSuite有相似的特性,事实上,Chain Of Resposibility的实现基本上也是这种做法。算的上比较常见的。
------解决方案--------------------
引用:
引用:
引用:
引用:引用:
他创建一个类对象有个属性是集合,反过来又用集合添加了这个类对象,我以为不能这么做呢,结果运行通过了,可是我觉得这和java的抽象哲学相违背啊。就好像人这个类里张三的身高属性又包含了张三这个类对象一样……