请教如何检验用户传入的类型是正确的

时间:2008-05-13 17:48:36   来源:论坛整理  作者:  编辑:chinaitzhe
有个bean,ColumnBean,它的属性由用户指定
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





public class ColumnBean{

  private String columnName;

  private int columnType;



  //......getter/setter



  public void setColumnType(int type) throws IllegalArgumentException{

    //在这里我想校验传入的类型是否正确,请问如何做?

  }

}



//正常情况下用户应这样调用

new ColumnBean().setColumnType(java.sql.Types.INTEGER);//正确的设置

//假如非正常的呢?

new ColumnBean().setColumnType(5000);//故意错误的设置







还有一个思路是把“columnType”声明为String的,在set的时候我用Class.forName(type)检查,可假如是基本数据类型怎么办?如:
new ColumnBean().setColumnType("int");
网友回复:!@(*$^!@(^$)!
怎么可能int?
你數據庫里面設置的是INTEGER
setColumnType(java.sql.Types.INTEGER);
你傳int根本進不去,會報錯啊
网友回复:
引用 1 楼 yami251139 的回复:
!@(*$^!@(^$)!
怎么可能int?
你數據庫里面設置的是INTEGER
setColumnType(java.sql.Types.INTEGER);
你傳int根本進不去,會報錯啊

不是把,java.sql.Types.INTEGER这个就是int阿!表示4!

但像楼主那样判定,有点困难

还有第2各方法,传进String,之后你得把基本类型转化为相应的包装类型吧~
网友回复:呵呵...

您的意思是假如传String,我首先要判定是否是基本类型,比如可以构造一个map,key是"int","long",等等...然后再从里面get,得到包装类的字符串"Integer", 然后假如Class.forName()抛异常,就说明类型是错误的! 是吧?
网友回复:似乎没怎么看明白。
网友回复:把“columnType”声明为String的,用的时候进行类型转换吗?可以用JS 先判定下塞
网友回复: 除非columnType声明为String类型的。值是传不进去的。编译就同步过吧!
网友回复:我不知道大家是怎么了....
回去看看API吧
java.sql.Types.INTEGER这个是什么类型,是final int的!
网友回复:up``````````````
网友回复:我的需求很简单,就是用户在为ColumnBean set columnType的时候,要检查指定的类型是不是java里面有的数据类型就可以了。假如随便set一个不存在类型,要抛出一个异常来提示。

如:new ColumnBean().setColumnType("int");//视为正确的设置
new ColumnBean().setColumnType("Integer");//也视为正确的设置
new ColumnBean().setColumnType("intttt");//错误的设置,抛出异常

网友回复:
Java code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/







package test;



import java.lang.reflect.Field;

import java.util.ArrayList;

import java.util.List;



public class ColumnBean1 {



    private String columnName;



    private String columnType;



    // ......getter/setter



    public boolean setColumnType(String type) throws IllegalArgumentException, ClassNotFoundException {



        if (type.equalsIgnoreCase("int"))

            type = "Integer";

        type = type.toUpperCase();

        Class c = Class.forName("java.sql.Types");

        Field[] f = c.getDeclaredFields();

        List<String> list = new ArrayList<String>();

        for (Field f1 : f) {

            list.add(f1.getName());

        }

        if (list.contains(type))

            return true;

        else

            return false;

    }



    public static void main(String[] args) throws IllegalArgumentException, ClassNotFoundException {

        System.out.println(new ColumnBean1().setColumnType("int"));

        System.out.println(new ColumnBean1().setColumnType("int22"));

        System.out.println(new ColumnBean1().setColumnType("char"));

    }

}





关键字:请教,检验,用户,传入,类型,正确,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面