java常用的方法和封装类之一

时间:2022-03-04 15:47:12

1.实体之间的转化
问题描述:一个实体赋值到另一个实体类。
解决方案:书写一个方法,通过反射把相同的变量名字进行赋值。

/** * Created by wangzhipeng on 2017/3/16. */
public class CopyUtils {
    public static void Copy(Object source, Object dest) throws Exception {
        // 获取属性
        BeanInfo sourceBean = Introspector.getBeanInfo(source.getClass(),Object.class);
        PropertyDescriptor[] sourceProperty = sourceBean.getPropertyDescriptors();

        BeanInfo destBean = Introspector.getBeanInfo(dest.getClass(),Object.class);
        PropertyDescriptor[] destProperty = destBean.getPropertyDescriptors();

        try {
            for (int i = 0; i < sourceProperty.length; i++) {

                for (int j = 0; j < destProperty.length; j++) {

                    if (sourceProperty[i].getName().equals(destProperty[j].getName())  && sourceProperty[i].getPropertyType() == destProperty[j].getPropertyType()) {
                        // 调用source的getter方法和dest的setter方法
                        destProperty[j].getWriteMethod().invoke(dest,sourceProperty[i].getReadMethod().invoke(source));
                        break;
                    }
                }
            }
        } catch (Exception e) {
            throw new Exception("属性复制失败:" + e.getMessage());
        }
    }

    public static void main(String[] args) throws Exception{
        AppointmentOrderParam appointmentOrderParam = new AppointmentOrderParam();
        appointmentOrderParam.setAppointmentTime("2017/05/04");
        appointmentOrderParam.setConditionDescription("这个毛病已经由来已久了,以前没钱看,现在有钱了,想彻底根治");
        appointmentOrderParam.setExpertId("myh111000");
        appointmentOrderParam.setOtherOrderId("0001123ll33");
        appointmentOrderParam.setSubscriberName("呼兰芬");
        appointmentOrderParam.setSubscriberPhone("11097777");
        appointmentOrderParam.setTheDisease("呼吸病");
        appointmentOrderParam.setTimeSlot(1);
        appointmentOrderParam.setTreatmentAddress("北京第三附属医院");
        appointmentOrderParam.setTreatmentPrice(200);
        appointmentOrderParam.setUserId("kkk888");
        AppointmentOrder appointmentOrder = new AppointmentOrder();
        CopyUtils.Copy(appointmentOrderParam,appointmentOrder);
        System.out.println(appointmentOrder);
    }
}

2.时间格式转化
问题描述:在项目的使用过程中经常遇见时间转化字符串,或者字符串转化为时间的问题。
解决方案:我们封装一个类型。

/* * File Name:DateUtil.java * Comments: 日期操作工具类 * Author: * Create Date:2013-4-8 上午11:13:29 * Modified By: * Modified Date: * Why & What is modified: * version: V1.0 */
package com.jiayu.his.util;

import java.text.DateFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/** * 日期操作工具类 * @date 2013-4-8 上午11:13:29 * @version V1.0 */
public class DateUtil {
    /** 日期格式 yyyy-MM-dd */
    public static final String DateFormat1 = "yyyy-MM-dd";
    public static final String DateFormat2 = "yyyy-MM-dd HH:mm:ss";
    public static final String DateFormat3 = "yyyy-MM-dd HH:mm";

    /** * 将给定的日期按照 yyyy-MM-dd 格式化后返回字符串 * @param date * @return */
    public static String dateToString(Date date) {
        if(null == date){
            return "";
        }
        Format formatter = new SimpleDateFormat("yyyy-MM-dd");
        return formatter.format(date);
    }

    public static String alldateToString(Date date) {
        if(null == date){
            return "";
        }
        Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return formatter.format(date);
    }
    /** * 将给定的日期按照 pattern 格式化后返回字符串 * @param date * @param pattern * @return */
    public static String dateToString(Date date,String pattern) {
        if(null == date){
            return "";
        }
        Format formatter = new SimpleDateFormat(pattern);
        return formatter.format(date);
    }

    /** * 取得当前服务器的时间 按照yyyy-MM-dd 格式化后返回字符串 * @return */
    public static String getCurrentDate(){
        return dateToString(new Date());
    }

    /** * 取得当前服务器的时间 按照yyyy-MM-dd 格式化后返回字符串 * @return */
    public static String getCurrentDateAndTime(){
        return dateToString(new Date(),"yyyy-MM-dd hh:mm:ss");
    }

    /** * 计算并返回给定年月的最后一天 */
    public static String lastDateOfMonth(int year, int month) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.set(Calendar.YEAR, year);
        gc.set(Calendar.MONTH, month - 1);
        int maxDate = gc.getActualMaximum(Calendar.DAY_OF_MONTH);
        gc.set(Calendar.DATE, maxDate);
        return dateToString(gc.getTime());
    }

    /** * 计算并返回日期中的星期几 */

    public static int weekOfDate(java.util.Date d1) {
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(d1);
        return gc.get(Calendar.DAY_OF_WEEK);
    }
    /** * 字符串转日期 * @param dateStr * @param formatStr * @return */
    public static Date stringToDate(String dateStr,String formatStr){       
        DateFormat dd=new SimpleDateFormat(formatStr);      
        Date date=null;     
        try {           
            date = dd.parse(dateStr);       
        } catch (ParseException e) {    
            e.printStackTrace();
            return null;
        }       
        return date;    
    }
    /** * 时间戳字符串转日期 * @param dateStr * @param formatStr * @return */
    public static Date timestampToDate(String dateStr,String formatStr){
        SimpleDateFormat sdf=new SimpleDateFormat(formatStr);  
        return  stringToDate(sdf.format(new Date(Long.parseLong(dateStr))),formatStr);  


    }

}

3.java中instanceof用法
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
用法:
result = object instanceof class
参数:
Result:布尔类型。
Object:必选项。任意对象表达式。
Class:必选项。任意已定义的对象类。
说明:
如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。