判断字符串为空
字符串string为null或者string=""
可以这样:
性价比最高的一种方法。
if(string == null || string.length() <=0)
return true;
Java SE 6.0之后可以使用isEmpty()方法,和上面的方法效率差不多。
if(Sring == null || string.isEmpty())
return true;
字符串为string=" "
可以这样:
if(String == null || string.trim().length() <=0)
return true;
trim()方法是去掉string中的前导和尾部的空白符,不过trim()里面用到了substring()方法获取新串,所以效率比较低,可以使用apache的commons-lang包里面的StringUtils里面的isBlank()方法。
/*
* @param cs the CharSequence to check, may be null
* @return {@code true} if the CharSequence is null, empty or whitespace
* @since 2.0
* @since 3.0 Changed signature from isBlank(String) to isBlank(CharSequence)
*/
public static boolean isBlank(final CharSequence cs) {
int strLen;
if (cs == null || (strLen = cs.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if (Character.isWhitespace(cs.charAt(i)) == false) {
return false;
}
}
return true;
}
反射实现属性基本相同的两个实体类的赋值
问题:有StudentA和StudentB两个类,属性基本相同,如下:
StudentA A = new StudentA();
A.setId("1311");
A.setName("Andy");
A.setTrueName("Andy");
StudentB B = new StudentB();
现在要把A里面的属性赋值给B,第一种方法就是使用set get方法,get属性set属性。 还可以使用反射来实现属性的赋值。 前提最好是set get方法都是标准方法。 StudentA.java:
public class StudentA {
private String id;
private String name;
private String trueName;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the trueName
*/
public String getTrueName() {
return trueName;
}
/**
* @param trueName the trueName to set
*/
public void setTrueName(String trueName) {
this.trueName = trueName;
}
}
StudentB.java:
public class StudentB {
private String id;
private String name;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the trueName
*/
@Override
public String toString(){
return id+" "+name;
}
}
测试代码:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TestReflection {
public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchMethodException, IllegalAccessException, InvocationTargetException{
StudentA A = new StudentA();
A.setId("1311");
A.setName("Andy");
A.setTrueName("Andy");
StudentB B = new StudentB();
copy(A, B);
System.err.println(B.toString());
}
private static void copy(Object source, Object target) throws SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
Class sourceClass = source.getClass();
Class targetClass = target.getClass();
Field[] sourceFields = sourceClass.getDeclaredFields();
Field[] targetFields = targetClass.getDeclaredFields();
for(Field sf : sourceFields){
String name = sf.getName();
Class type = sf.getType();
String methodName = name.substring(0,1).toUpperCase()+name.substring(1);
Method getMethod = sourceClass.getMethod("get"+methodName);
Object value = getMethod.invoke(source);
for(Field tf : targetFields){
String targetName = tf.getName();
if(targetName.equals(name)){
Method setMethod = targetClass.getMethod("set"+methodName, type);
setMethod.invoke(target, value);
}
}
}
}
}
简单少量的使用set get方法即可,大量的可以使用反射的方法。