有个bean,ColumnBean,它的属性由用户指定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");
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根本進不去,會報錯啊
回去看看API吧
java.sql.Types.INTEGER这个是什么类型,是final int的!
new ColumnBean().setColumnType("Integer");//也视为正确的设置
new ColumnBean().setColumnType("intttt");//错误的设置,抛出异常
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"));
}
}