简历编写 Posted on 2021-08-13 | In 678 优先简历具备的特点对于程序员行业来说,一份优秀的简历,需要具备几个特点: 让招聘者看了很舒服,不会看了就想丢垃圾桶里。 让招聘者能很快看到自己想要看到的东西。 Read more »
口水话理解设计模式 Posted on 2021-08-03 | In 设计模式 口水话理解设计模式01 工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。 Read more »
安卓-对象属性值复制 Posted on 2021-07-20 | In Android代码片段 工具类-对象属性值复制123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148import java.lang.reflect.Method;import java.util.Arrays;import java.util.Collection;import java.util.List;/** * 说明:对象属性值复制 */public class CopyPropertiesManager { /** * 利用反射实现对象之间属性复制 * * @param from * @param to */ public static void copyProperties(Object from, Object to) throws Exception { copyPropertiesExclude(from, to, null); } /** * 复制对象属性 * * @param from * @param to * @param excludsArray 排除属性列表 * @throws Exception */ @SuppressWarnings("unchecked") public static void copyPropertiesExclude(Object from, Object to, String[] excludsArray) throws Exception { List<String> excludesList = null; if (excludsArray != null && excludsArray.length > 0) { excludesList = Arrays.asList(excludsArray); //构造列表对象 } Method[] fromMethods = from.getClass().getDeclaredMethods(); Method[] toMethods = to.getClass().getDeclaredMethods(); Method fromMethod = null, toMethod = null; String fromMethodName = null, toMethodName = null; for (int i = 0; i < fromMethods.length; i++) { fromMethod = fromMethods[i]; fromMethodName = fromMethod.getName(); if (!fromMethodName.contains("get")) { continue; } //排除列表检测 if (excludesList != null && excludesList.contains(fromMethodName.substring(3).toLowerCase())) { continue; } toMethodName = "set" + fromMethodName.substring(3); toMethod = findMethodByName(toMethods, toMethodName); if (toMethod == null) { continue; } Object value = fromMethod.invoke(from, new Object[0]); if (value == null) { continue; } //集合类判空处理 if (value instanceof Collection) { Collection newValue = (Collection) value; if (newValue.size() <= 0) { continue; } } toMethod.invoke(to, new Object[]{value}); } } /** * 对象属性值复制,仅复制指定名称的属性值 * * @param from * @param to * @param includsArray * @throws Exception */ @SuppressWarnings("unchecked") public static void copyPropertiesInclude(Object from, Object to, String[] includsArray) throws Exception { List<String> includesList = null; if (includsArray != null && includsArray.length > 0) { includesList = Arrays.asList(includsArray); //构造列表对象 } else { return; } Method[] fromMethods = from.getClass().getDeclaredMethods(); Method[] toMethods = to.getClass().getDeclaredMethods(); Method fromMethod = null, toMethod = null; String fromMethodName = null, toMethodName = null; for (int i = 0; i < fromMethods.length; i++) { fromMethod = fromMethods[i]; fromMethodName = fromMethod.getName(); if (!fromMethodName.contains("get")) { continue; } //排除列表检测 String str = fromMethodName.substring(3); if (!includesList.contains(str.substring(0, 1).toLowerCase() + str.substring(1))) { continue; } toMethodName = "set" + fromMethodName.substring(3); toMethod = findMethodByName(toMethods, toMethodName); if (toMethod == null) { continue; } Object value = fromMethod.invoke(from, new Object[0]); if (value == null) { continue; } //集合类判空处理 if (value instanceof Collection) { Collection newValue = (Collection) value; if (newValue.size() <= 0) { continue; } } toMethod.invoke(to, new Object[]{value}); } } /** * 从方法数组中获取指定名称的方法 * * @param methods * @param name * @return */ public static Method findMethodByName(Method[] methods, String name) { for (int j = 0; j < methods.length; j++) { if (methods[j].getName().equals(name)) { return methods[j]; } } return null; } public static void main(String[] args) { //使用案例: //把loginBean.getData()类中的所有属性赋值给user类。 //注意:loginBean.getData()类和user类中的所有参数名称要一致。 User user = new User(); try { CopyPropertiesManager.copyProperties(loginBean.getData(), user); } catch (Exception e) { e.printStackTrace(); } }} 注意:只能复制属性那一级别的。即,如果对象内部还有对象,这对象无法复制过去(报“java.lang.IllegalArgumentException: argument type mismatch”错误) Read more »
Java-枚举 Posted on 2021-07-20 | In Java 枚举不带值123enum MobileCodeActionEnum { MOBILE_LOGIN, THIRD_LOGIN_BIND, CHANGE_PASS} 使用 Read more »
UI-ScalableImageView Posted on 2021-07-09 | In Android ScalableImageView放缩和移动由于有两次移动,⼀次是初始偏移,另⼀次是随⼿指拖动,所以要分开两次写 translate() Read more »
触摸反馈基础 Posted on 2021-07-09 | In Android 触摸反馈基础自定义单 View 的触摸反馈 重写 onTouchEvent(),在⽅法内部定制触摸反馈算法 是否消费事件取决于 ACTION_DOWN 事件是否返回 true MotionEvent getActionMasked() 和 getAction() POINTER_DOWN / POINTER_UP 和 getActionIndex() Read more »
UI-自定义布局 Posted on 2021-07-09 | In Android 自定义布局布局过程 确定每个 View的位置和尺⼨ 作用:为绘制和触摸范围做⽀持 绘制:知道往哪⾥绘制 触摸反馈:知道用户点的是哪⾥ Read more »
UI-Bitmap Posted on 2021-07-09 | In Android Bitmap和Drawable以及手写MaterialEditText hencoder课程 Bitmap 和 Drawable Read more »