BlogJava 联系 聚合 管理  

Blog Stats

随笔分类

文章分类

随笔档案

文章档案


kevin-guan

在学习异常时,看到这段代码例子,有点不知所措的感觉,一时半会还看不懂,这才感觉自己的代码水平还真是够烂的。然而我想我能够胜任大多数公司的开发工作,因为实现了功能是最关键的,很多项目仅仅是一堆开源框架的大杂烩,没人会关心你写得怎么样。

package chapter9;

/**
 * 
@author Administrator 用数组模拟对象
 
*/

public class DynamicFields {
    
private Object[][] fields;

    
public DynamicFields(int initialSize) {
        fields 
= new Object[initialSize][2];
        
for (int i = 0; i < initialSize; i++{
            fields[i] 
= new Object[] nullnull };
        }

    }


    
public String toString() {
        StringBuffer result 
= new StringBuffer();
        
for (int i = 0; i < fields.length; i++{
            result.append(fields[i][
0]);
            result.append(
"");
            result.append(fields[i][
1]);
            result.append(
"\n");
        }

        
return result.toString();
    }


    
private int hasField(String id) {
        
for (int i = 0; i < fields.length; i++{
            
if (id.equals(fields[i][0])) {
                
return i;
            }

        }

        
return -1;
    }


    
private int getFieldNuber(String id) throws NoSuchFieldException {
        
int fieldNum = hasField(id);
        
if (fieldNum == -1{
            
throw new NoSuchFieldException();
        }

        
return fieldNum;
    }


    
/**
     * 
@param id
     * 
@return 如果数组长度不够则新增长度
     
*/

    
private int makeField(String id) {
        
for (int i = 0; i < fields.length; i++{
            
if (fields[i][0== null{
                fields[i][
0= id;
                
return i;
            }

        }

        Object[][] tmp 
= new Object[fields.length + 1][2];
        
for (int i = 0; i < fields.length; i++{
            tmp[i] 
= fields[i];
        }

        
for (int i = fields.length; i < tmp.length; i++{
            tmp[i] 
= new Object[] nullnull };
        }

        fields 
= tmp;
        
return makeField(id);
    }


    
public Object getField(String id) throws NoSuchFieldException {
        
return fields[getFieldNuber(id)];
    }


    
public Object setField(String id, Object value)
            
throws DynamicFieldsException {
        
if (value == null{
            DynamicFieldsException def 
= new DynamicFieldsException();
            def.initCause(
new NullPointerException());
            
throw def;
        }

        
int fieldNumber = hasField(id);
        
if (fieldNumber == -1{
            fieldNumber 
= makeField(id);
        }

        Object result 
= null;
        
try {
            result 
= getField(id);
        }
 catch (NoSuchFieldException e) {
            
throw new RuntimeException(e);
        }

        fields[fieldNumber][
1= value;
        
return result;
    }


    
public static void main(String[] args) {
        DynamicFields df 
= new DynamicFields(3);
        
try {
            
// df.setField("test", null);
            df.setField("d""A value for d");
            df.setField(
"number"new Integer(47));
            df.setField(
"number2"new Integer(48));
            System.out.println(
"first:================");
            System.out.println(df);
            df.setField(
"d""A new value for d");
            df.setField(
"number3"new Integer(11));
            System.out.println(
"second:===============");
            System.out.println(df);
            System.out.println(df.getField(
"d"));
            Object field 
= df.getField("a3");
        }
 catch (DynamicFieldsException e) {
            
throw new RuntimeException(e);
        }
 catch (NoSuchFieldException e) {
            
throw new RuntimeException(e);
        }

    }

}


class DynamicFieldsException extends Exception {
    
public DynamicFieldsException() {
        
super();
    }

}


看别人的代码,这才知道原来可以这么写的。我还真是够肤浅的。这个类是实现一个可以动态改变的数组。
posted on 2008-01-23 14:02 KevinGuan 阅读(160) 评论(0)  编辑  收藏 所属分类: Thinking in java学习笔记

只有注册用户登录后才能发表评论。


网站导航: