通用转换,可以直接拿来用

  1. import com.alibaba.fastjson.JSON;
  2. import lombok.experimental.UtilityClass;
  3. import lombok.extern.slf4j.Slf4j;
  4. import java.lang.reflect.Array;
  5. import java.lang.reflect.InvocationTargetException;
  6. import java.util.*;
  7. import java.util.stream.Stream;
  8. /**
  9. * 将Object转换为指定的类型
  10. *
  11. * @author zhouzhenyong
  12. * @since 2019/5/4 下午12:30
  13. */
  14. @Slf4j
  15. @UtilityClass
  16. public class ObjectUtils {
  17. private final String NULL_STR = "null";
  18. public Boolean toBoolean(Object value) {
  19. if (null == value) {
  20. return null;
  21. }
  22. if (value instanceof Boolean) {
  23. return (Boolean) value;
  24. }
  25. return Boolean.valueOf((String) (value));
  26. }
  27. public Character toChar(Object value) {
  28. if (null == value) {
  29. return null;
  30. }
  31. if (value instanceof Character) {
  32. return (Character) value;
  33. }
  34. String valueStr = (String) (value);
  35. if (valueStr.length() == 0) {
  36. return null;
  37. }
  38. return valueStr.charAt(0);
  39. }
  40. public String toStr(Object value) {
  41. if (null == value) {
  42. return null;
  43. }
  44. if (value instanceof String) {
  45. return (String) value;
  46. }
  47. return String.valueOf(value);
  48. }
  49. public String toJsonStr(Object value) {
  50. if (null == value) {
  51. return null;
  52. }
  53. if (value instanceof String) {
  54. return (String) value;
  55. }
  56. return JSON.toJSONString(value);
  57. }
  58. public Byte toByte(Object value) {
  59. if (null == value) {
  60. return null;
  61. }
  62. try {
  63. if (value instanceof Number) {
  64. return ((Number) value).byteValue();
  65. }
  66. return Byte.valueOf((String) (value));
  67. } catch (NumberFormatException | ClassCastException e) {
  68. log.error(RPC_SDK_LOG_PRE + "toByte error", e);
  69. throw e;
  70. }
  71. }
  72. public Short toShort(Object value) {
  73. if (null == value) {
  74. return null;
  75. }
  76. try {
  77. if (value instanceof Number) {
  78. return ((Number) value).shortValue();
  79. }
  80. return Short.valueOf((String) (value));
  81. } catch (NumberFormatException | ClassCastException e) {
  82. log.error(RPC_SDK_LOG_PRE + "toShort error", e);
  83. throw e;
  84. }
  85. }
  86. public Integer toInt(Object value) {
  87. if (null == value) {
  88. return null;
  89. }
  90. try {
  91. if (value instanceof Number) {
  92. return ((Number) value).intValue();
  93. }
  94. return Integer.valueOf((String) (value));
  95. } catch (NumberFormatException | ClassCastException e) {
  96. log.error(RPC_SDK_LOG_PRE + "toInt error", e);
  97. throw e;
  98. }
  99. }
  100. public Long toLong(Object value) {
  101. if (null == value) {
  102. return null;
  103. }
  104. try {
  105. if (value instanceof Number) {
  106. return ((Number) value).longValue();
  107. }
  108. if (value instanceof java.sql.Date) {
  109. return ((java.sql.Date) value).getTime();
  110. }
  111. if (value instanceof java.sql.Time) {
  112. return ((java.sql.Time) value).getTime();
  113. }
  114. if (value instanceof java.sql.Timestamp) {
  115. return ((java.sql.Timestamp) value).getTime();
  116. }
  117. if (value instanceof Date) {
  118. return ((Date) value).getTime();
  119. }
  120. return Long.valueOf((String) (value));
  121. } catch (NumberFormatException | ClassCastException e) {
  122. log.error(RPC_SDK_LOG_PRE + "toLong error", e);
  123. throw e;
  124. }
  125. }
  126. public Double toDouble(Object value) {
  127. if (null == value) {
  128. return null;
  129. }
  130. try {
  131. if (value instanceof Number) {
  132. return ((Number) value).doubleValue();
  133. }
  134. return Double.valueOf((String) (value));
  135. } catch (NumberFormatException | ClassCastException e) {
  136. log.error(RPC_SDK_LOG_PRE + "toDouble error", e);
  137. throw e;
  138. }
  139. }
  140. public Float toFloat(Object value) {
  141. if (null == value) {
  142. return null;
  143. }
  144. try {
  145. if (value instanceof Number) {
  146. return ((Number) value).floatValue();
  147. }
  148. return Float.valueOf((String) (value));
  149. } catch (NumberFormatException | ClassCastException e) {
  150. log.error(RPC_SDK_LOG_PRE + "toFloat error", e);
  151. throw e;
  152. }
  153. }
  154. public <T> T toEnum(Class<T> tClass, Object value) {
  155. if (null == tClass || null == value) {
  156. return null;
  157. }
  158. if (tClass.isEnum() && value instanceof String) {
  159. return Stream.of(tClass.getEnumConstants()).filter(t -> t.toString().equalsIgnoreCase((String) value)).findFirst().orElse(null);
  160. }
  161. return null;
  162. }
  163. @SuppressWarnings({"unchecked", "rawtypes"})
  164. public <T> T[] toArray(Object value) {
  165. if (null == value) {
  166. return null;
  167. }
  168. if (value.getClass().isArray()) {
  169. return (T[]) value;
  170. }
  171. if (value instanceof Collection) {
  172. return (T[]) ((Collection) value).toArray();
  173. }
  174. return null;
  175. }
  176. @SuppressWarnings({"unchecked", "rawtypes"})
  177. public <T> T[] toArray(Class<T> tClass, Object value) {
  178. if (null == value) {
  179. return null;
  180. }
  181. if (value.getClass().isArray()) {
  182. return (T[]) value;
  183. }
  184. if (value instanceof Collection) {
  185. return (T[]) ((Collection) value).toArray();
  186. }
  187. if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String) value)) {
  188. return (T[]) (JSON.parseArray((String) value, tClass).toArray());
  189. }
  190. return null;
  191. }
  192. @SuppressWarnings({"unchecked", "rawtypes"})
  193. public <T> List<T> toList(Object value) {
  194. if (null == value) {
  195. return null;
  196. }
  197. if (List.class.isAssignableFrom(value.getClass())) {
  198. return (List) value;
  199. }
  200. if (Array.class.isAssignableFrom(value.getClass())) {
  201. return Arrays.asList(toArray(value));
  202. }
  203. if (Collection.class.isAssignableFrom(value.getClass())) {
  204. return new ArrayList((Collection) value);
  205. }
  206. return null;
  207. }
  208. @SuppressWarnings({"unchecked", "rawtypes"})
  209. public <T> List<T> toList(Class<T> tClass, Object value) {
  210. if (null == value || null == tClass) {
  211. return null;
  212. }
  213. if (List.class.isAssignableFrom(value.getClass())) {
  214. return (List<T>) value;
  215. }
  216. if (Array.class.isAssignableFrom(value.getClass())) {
  217. return Arrays.asList(toArray(value));
  218. }
  219. if (Collection.class.isAssignableFrom(value.getClass())) {
  220. return new ArrayList((Collection<T>) value);
  221. }
  222. if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {
  223. return JSON.parseArray((String) value, tClass);
  224. }
  225. return null;
  226. }
  227. @SuppressWarnings({"unchecked", "rawtypes"})
  228. public <T> Set<T> toSet(Object value) {
  229. if (null == value) {
  230. return null;
  231. }
  232. if (Set.class.isAssignableFrom(value.getClass())) {
  233. return (Set) value;
  234. }
  235. if (Array.class.isAssignableFrom(value.getClass())) {
  236. return new HashSet(Arrays.asList(toArray(value)));
  237. }
  238. if (Collection.class.isAssignableFrom(value.getClass())) {
  239. return new HashSet<>((Collection) value);
  240. }
  241. return null;
  242. }
  243. @SuppressWarnings({"unchecked", "rawtypes"})
  244. public <T> Set<T> toSet(Class<T> tClass, Object value) {
  245. if (null == value || null == tClass) {
  246. return null;
  247. }
  248. if (Set.class.isAssignableFrom(value.getClass())) {
  249. return (Set) value;
  250. }
  251. if (Array.class.isAssignableFrom(value.getClass())) {
  252. return new HashSet(Arrays.asList(toArray(value)));
  253. }
  254. if (Collection.class.isAssignableFrom(value.getClass())) {
  255. return new HashSet<>((Collection) value);
  256. }
  257. if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {
  258. return new HashSet<>(JSON.parseArray((String) value, tClass));
  259. }
  260. return null;
  261. }
  262. @SuppressWarnings({"unchecked", "rawtypes"})
  263. public <T> Queue<T> toQueue(Object value) {
  264. if (null == value) {
  265. return null;
  266. }
  267. if (Queue.class.isAssignableFrom(value.getClass())) {
  268. return (Queue) value;
  269. }
  270. if (Array.class.isAssignableFrom(value.getClass())) {
  271. return new ArrayDeque(Arrays.asList(toArray(value)));
  272. }
  273. if (Collection.class.isAssignableFrom(value.getClass())) {
  274. return new ArrayDeque<>((Collection) value);
  275. }
  276. return null;
  277. }
  278. @SuppressWarnings({"unchecked", "rawtypes"})
  279. public <T> Queue<T> toQueue(Class<T> tClass, Object value) {
  280. if (null == value) {
  281. return null;
  282. }
  283. if (Queue.class.isAssignableFrom(value.getClass())) {
  284. return (Queue) value;
  285. }
  286. if (Array.class.isAssignableFrom(value.getClass())) {
  287. return new ArrayDeque(Arrays.asList(toArray(value)));
  288. }
  289. if (Collection.class.isAssignableFrom(value.getClass())) {
  290. return new ArrayDeque<>((Collection) value);
  291. }
  292. if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {
  293. return new ArrayDeque<>(JSON.parseArray((String) value, tClass));
  294. }
  295. return null;
  296. }
  297. @SuppressWarnings({"unchecked", "rawtypes"})
  298. public <T> Collection<T> toCollection(Object value) {
  299. if (null == value) {
  300. return null;
  301. }
  302. if (Collection.class.isAssignableFrom(value.getClass())) {
  303. return (Collection) value;
  304. }
  305. return null;
  306. }
  307. @SuppressWarnings({"unchecked", "rawtypes"})
  308. public <T> Collection<T> toCollection(Class<T> tClass, Object value) {
  309. if (null == value || null == tClass) {
  310. return null;
  311. }
  312. if (Collection.class.isAssignableFrom(value.getClass())) {
  313. return (Collection) value;
  314. }
  315. if (String.class.isAssignableFrom(value.getClass()) && isArrayObject((String)value)) {
  316. return JSON.parseArray((String) value, tClass);
  317. }
  318. return null;
  319. }
  320. @SuppressWarnings({"unchecked"})
  321. public <K, V> Map<K, V> toMap(Object value) {
  322. if (null == value) {
  323. return null;
  324. }
  325. if (value instanceof Map) {
  326. return (Map<K, V>) value;
  327. }
  328. return null;
  329. }
  330. /**
  331. * 将对象按照目标类型进行转换
  332. *
  333. * @param tClass 要转出的类型
  334. * @param value 待转换的值
  335. * @param <T> 类型
  336. * @return 转换后的值
  337. */
  338. @SuppressWarnings({"unchecked", "rawtypes"})
  339. public <T> T cast(Class<? extends T> tClass, Object value) {
  340. if (null == tClass || null == value) {
  341. return null;
  342. }
  343. // 对于是对应的实例,则直接转换,或者要抓换的是其父类,则也可以直接转换
  344. if (tClass.isInstance(value) || tClass.isAssignableFrom(value.getClass())) {
  345. return (T) value;
  346. }
  347. if (tClass == char.class || tClass == Character.class) {
  348. return (T) toChar(value);
  349. }
  350. if (tClass == String.class) {
  351. return (T) toJsonStr(value);
  352. }
  353. if (tClass == byte.class || tClass == Byte.class) {
  354. return (T) toByte(value);
  355. }
  356. if (tClass == short.class || tClass == Short.class) {
  357. return (T) toShort(value);
  358. }
  359. if (tClass == int.class || tClass == Integer.class) {
  360. return (T) toInt(value);
  361. }
  362. if (tClass == long.class || tClass == Long.class) {
  363. return (T) toLong(value);
  364. }
  365. if (tClass == float.class || tClass == Float.class) {
  366. return (T) toFloat(value);
  367. }
  368. if (tClass == double.class || tClass == Double.class) {
  369. return (T) toDouble(value);
  370. }
  371. if (tClass == boolean.class || tClass == Boolean.class) {
  372. return (T) toBoolean(value);
  373. }
  374. if (tClass.isEnum()) {
  375. return toEnum(tClass, value);
  376. }
  377. if (tClass.isArray() || Array.class.isAssignableFrom(tClass)) {
  378. return (T) toArray(value);
  379. }
  380. if (List.class.isAssignableFrom(tClass) && value instanceof List) {
  381. return (T) toList(value);
  382. }
  383. if (Set.class.isAssignableFrom(tClass) && value instanceof Set) {
  384. return (T) toSet(value);
  385. }
  386. if (Queue.class.isAssignableFrom(tClass) && value instanceof Queue) {
  387. return (T) toQueue(value);
  388. }
  389. if (Collection.class.isAssignableFrom(tClass) && value instanceof Collection) {
  390. return (T) toCollection(value);
  391. }
  392. // 如果是基本类型,则按照基本类型处理
  393. if (value.getClass().isPrimitive()) {
  394. return castStr(tClass, String.valueOf(value));
  395. }
  396. // value为String类型,则最后按照实体类型的json进行转换
  397. if(String.class.isAssignableFrom(value.getClass())) {
  398. String valueStr = (String) value;
  399. if(isJsonObject(valueStr)) {
  400. return JSON.parseObject((String) value, tClass);
  401. }
  402. }
  403. // value为 map 类型,则直接转换
  404. if(Map.class.isAssignableFrom(value.getClass())) {
  405. JSONObject jsonObject = new JSONObject();
  406. jsonObject.putAll((Map) value);
  407. return jsonObject.toJavaObject(tClass);
  408. }
  409. throw new ClassCastException("值 " + value + " 向类型 " + tClass.getName() + " 转换异常");
  410. }
  411. public boolean isJsonObject(String content) {
  412. if (isEmpty(content)) {
  413. return false;
  414. }
  415. try {
  416. if (content.startsWith("{") && content.endsWith("}")) {
  417. return true;
  418. }
  419. } catch (Throwable ignore) {}
  420. return false;
  421. }
  422. public boolean isArrayObject(String content) {
  423. if (isEmpty(content)) {
  424. return false;
  425. }
  426. try {
  427. if (content.startsWith("[") && content.endsWith("]")) {
  428. return true;
  429. }
  430. } catch (Throwable ignore) {}
  431. return false;
  432. }
  433. /**
  434. * 将对象的数据,按照cls类型进行转换
  435. *
  436. * @param cls 待转换的Class类型
  437. * @param data 数据
  438. * @param <T> 返回类型
  439. * @return Class类型对应的对象
  440. */
  441. public <T> T castStr(Class<T> cls, String data) {
  442. if (cls.equals(String.class)) {
  443. // 针对data为null的情况进行转换
  444. if (NULL_STR.equals(data)) {
  445. return null;
  446. }
  447. return cls.cast(data);
  448. } else if (Character.class.isAssignableFrom(cls)) {
  449. return cls.cast(data.toCharArray());
  450. } else {
  451. try {
  452. if (NULL_STR.equals(data)) {
  453. return null;
  454. }
  455. return cls.cast(cls.getMethod("valueOf", String.class).invoke(null, data));
  456. } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
  457. log.error(RPC_SDK_LOG_PRE + "castStr error", e);
  458. }
  459. return null;
  460. }
  461. }
  462. /**
  463. * 对象是否为空
  464. * <p>
  465. * 种情况:
  466. * <ul>
  467. * <li>1.为null,则为空</li>
  468. * <li>2.为字符类型,则如果为空字符,则为空</li>
  469. * <li>3.为集合类型,则如果集合个数为空,则为空</li>
  470. * </ul>
  471. *
  472. * @param object 待核查对象
  473. * @return true:为空,false:不空
  474. */
  475. @SuppressWarnings("rawtypes")
  476. public Boolean isEmpty(Object object) {
  477. if (null == object) {
  478. return true;
  479. }
  480. if (object instanceof String) {
  481. String valueStr = (String) object;
  482. return "".equals(valueStr);
  483. }
  484. if (object instanceof Collection) {
  485. Collection collection = (Collection) object;
  486. return collection.isEmpty();
  487. }
  488. return false;
  489. }
  490. public Boolean isNotEmpty(Object object) {
  491. return !isEmpty(object);
  492. }
  493. }

object和list都可以转换,需要再加入ymlUtil

  1. import com.alibaba.fastjson.JSON;
  2. import com.alibaba.fastjson.JSONObject;
  3. import lombok.experimental.UtilityClass;
  4. import lombok.extern.slf4j.Slf4j;
  5. import java.lang.reflect.Array;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.util.*;
  8. import java.util.stream.Stream;
  9. import static com.isyscore.os.config.client.constant.Constants.CONFIG_LOG_PRE;
  10. /**
  11. * @author shizi
  12. * @since 2020/11/16 2:24 PM
  13. */
  14. @Slf4j
  15. @UtilityClass
  16. public class ObjectUtils {
  17. private final String NULL_STR = "null";
  18. public Boolean toBoolean(Object value) {
  19. if (null == value) {
  20. return null;
  21. }
  22. if (value instanceof Boolean) {
  23. return (Boolean) value;
  24. }
  25. return Boolean.valueOf((String)(value));
  26. }
  27. public Character toChar(Object value) {
  28. if (null == value) {
  29. return null;
  30. }
  31. if (value instanceof Character) {
  32. return (Character) value;
  33. }
  34. String valueStr = (String)(value);
  35. if (valueStr.length() == 0) {
  36. return null;
  37. }
  38. return valueStr.charAt(0);
  39. }
  40. public String toStr(Object value) {
  41. if (null == value) {
  42. return null;
  43. }
  44. if (value instanceof String) {
  45. return (String) value;
  46. }
  47. return String.valueOf(value);
  48. }
  49. public String toJsonStr(Object value) {
  50. if (null == value) {
  51. return null;
  52. }
  53. if (value instanceof String) {
  54. return (String) value;
  55. }
  56. return JSON.toJSONString(value);
  57. }
  58. public Byte toByte(Object value) {
  59. if (null == value) {
  60. return null;
  61. }
  62. try {
  63. if (value instanceof Number) {
  64. return ((Number) value).byteValue();
  65. }
  66. return Byte.valueOf((String)(value));
  67. } catch (NumberFormatException | ClassCastException e) {
  68. log.error(CONFIG_LOG_PRE + "toByte error", e);
  69. throw e;
  70. }
  71. }
  72. public Short toShort(Object value) {
  73. if (null == value) {
  74. return null;
  75. }
  76. try {
  77. if (value instanceof Number) {
  78. return ((Number) value).shortValue();
  79. }
  80. return Short.valueOf((String)(value));
  81. } catch (NumberFormatException | ClassCastException e) {
  82. log.error(CONFIG_LOG_PRE + "toShort error", e);
  83. throw e;
  84. }
  85. }
  86. public Integer toInt(Object value) {
  87. if (null == value) {
  88. return null;
  89. }
  90. try {
  91. if (value instanceof Number) {
  92. return ((Number) value).intValue();
  93. }
  94. return Integer.valueOf((String)(value));
  95. } catch (NumberFormatException | ClassCastException e) {
  96. log.error(CONFIG_LOG_PRE + "toInt error", e);
  97. throw e;
  98. }
  99. }
  100. public Long toLong(Object value) {
  101. if (null == value) {
  102. return null;
  103. }
  104. try {
  105. if (value instanceof Number) {
  106. return ((Number) value).longValue();
  107. }
  108. if (value instanceof java.sql.Date) {
  109. return ((java.sql.Date) value).getTime();
  110. }
  111. if (value instanceof java.sql.Time) {
  112. return ((java.sql.Time) value).getTime();
  113. }
  114. if (value instanceof java.sql.Timestamp) {
  115. return ((java.sql.Timestamp) value).getTime();
  116. }
  117. if (value instanceof java.util.Date) {
  118. return ((java.util.Date) value).getTime();
  119. }
  120. return Long.valueOf((String)(value));
  121. } catch (NumberFormatException | ClassCastException e) {
  122. log.error(CONFIG_LOG_PRE + "toLong error", e);
  123. throw e;
  124. }
  125. }
  126. public Double toDouble(Object value) {
  127. if (null == value) {
  128. return null;
  129. }
  130. try {
  131. if (value instanceof Number) {
  132. return ((Number) value).doubleValue();
  133. }
  134. return Double.valueOf((String)(value));
  135. } catch (NumberFormatException | ClassCastException e) {
  136. log.error(CONFIG_LOG_PRE + "toDouble error", e);
  137. throw e;
  138. }
  139. }
  140. public Float toFloat(Object value) {
  141. if (null == value) {
  142. return null;
  143. }
  144. try {
  145. if (value instanceof Number) {
  146. return ((Number) value).floatValue();
  147. }
  148. return Float.valueOf((String)(value));
  149. } catch (NumberFormatException | ClassCastException e) {
  150. log.error(CONFIG_LOG_PRE + "toFloat error", e);
  151. throw e;
  152. }
  153. }
  154. public <T> T toEnum(Class<T> tClass, Object value) {
  155. if (null == tClass || null == value) {
  156. return null;
  157. }
  158. if (tClass.isEnum() && value instanceof String) {
  159. return Stream.of(tClass.getEnumConstants()).filter(t -> t.toString().equalsIgnoreCase((String) value)).findFirst().orElse(null);
  160. }
  161. return null;
  162. }
  163. @SuppressWarnings({"unchecked", "rawtypes"})
  164. public <T> T[] toArray(Object value) {
  165. if (null == value) {
  166. return null;
  167. }
  168. if (value.getClass().isArray()) {
  169. return (T[]) value;
  170. }
  171. if (value instanceof Collection) {
  172. return (T[]) ((Collection) value).toArray();
  173. }
  174. return null;
  175. }
  176. @SuppressWarnings({"unchecked", "rawtypes"})
  177. public <T> List<T> toList(Object value) {
  178. if (null == value) {
  179. return null;
  180. }
  181. if (List.class.isAssignableFrom(value.getClass())) {
  182. return (List) value;
  183. }
  184. if (Array.class.isAssignableFrom(value.getClass())) {
  185. return Arrays.asList(toArray(value));
  186. }
  187. if (Collection.class.isAssignableFrom(value.getClass())) {
  188. return new ArrayList((Collection) value);
  189. }
  190. return null;
  191. }
  192. @SuppressWarnings({"unchecked", "rawtypes"})
  193. public <T> Set<T> toSet(Object value) {
  194. if (null == value) {
  195. return null;
  196. }
  197. if (Set.class.isAssignableFrom(value.getClass())) {
  198. return (Set) value;
  199. }
  200. if (Array.class.isAssignableFrom(value.getClass())) {
  201. return new HashSet(Arrays.asList(toArray(value)));
  202. }
  203. if (Collection.class.isAssignableFrom(value.getClass())) {
  204. return new HashSet<>((Collection) value);
  205. }
  206. return null;
  207. }
  208. @SuppressWarnings({"unchecked", "rawtypes"})
  209. public <T> Queue<T> toQueue(Object value) {
  210. if (null == value) {
  211. return null;
  212. }
  213. if (Queue.class.isAssignableFrom(value.getClass())) {
  214. return (Queue) value;
  215. }
  216. if (Array.class.isAssignableFrom(value.getClass())) {
  217. return new ArrayDeque(Arrays.asList(toArray(value)));
  218. }
  219. if (Collection.class.isAssignableFrom(value.getClass())) {
  220. return new ArrayDeque<>((Collection) value);
  221. }
  222. return null;
  223. }
  224. @SuppressWarnings({"unchecked", "rawtypes"})
  225. public <T> Collection<T> toCollection(Object value) {
  226. if (null == value) {
  227. return null;
  228. }
  229. if (Collection.class.isAssignableFrom(value.getClass())) {
  230. return (Collection) value;
  231. }
  232. return null;
  233. }
  234. @SuppressWarnings({"unchecked"})
  235. public <K, V> Map<K, V> toMap(Object value) {
  236. if (null == value) {
  237. return null;
  238. }
  239. if (value instanceof Map) {
  240. return (Map<K, V>) value;
  241. }
  242. return null;
  243. }
  244. /**
  245. * 将对象按照目标类型进行转换
  246. *
  247. * @param tClass 要转出的类型
  248. * @param value 待转换的值
  249. * @param <T> 类型
  250. * @return 转换后的值
  251. */
  252. @SuppressWarnings({"unchecked", "rawtypes"})
  253. public <T> Object cast(Class<? extends T> tClass, Object value) {
  254. if (null == tClass || null == value) {
  255. return null;
  256. }
  257. // 对于是对应的实例,则直接转换,或者要抓换的是其父类,则也可以直接转换
  258. if (tClass.isInstance(value) || tClass.isAssignableFrom(value.getClass())) {
  259. return (T) value;
  260. }
  261. if (tClass == char.class || tClass == Character.class) {
  262. return (T) toChar(value);
  263. }
  264. if (tClass == String.class) {
  265. return (T) toJsonStr(value);
  266. }
  267. if (tClass == byte.class || tClass == Byte.class) {
  268. return (T) toByte(value);
  269. }
  270. if (tClass == short.class || tClass == Short.class) {
  271. return (T) toShort(value);
  272. }
  273. if (tClass == int.class || tClass == Integer.class) {
  274. return (T) toInt(value);
  275. }
  276. if (tClass == long.class || tClass == Long.class) {
  277. return (T) toLong(value);
  278. }
  279. if (tClass == float.class || tClass == Float.class) {
  280. return (T) toFloat(value);
  281. }
  282. if (tClass == double.class || tClass == Double.class) {
  283. return (T) toDouble(value);
  284. }
  285. if (tClass == boolean.class || tClass == Boolean.class) {
  286. return (T) toBoolean(value);
  287. }
  288. if (tClass.isEnum()) {
  289. return toEnum(tClass, value);
  290. }
  291. if (tClass.isArray() || Array.class.isAssignableFrom(tClass)) {
  292. return (T) toArray(value);
  293. }
  294. if (List.class.isAssignableFrom(tClass) && value instanceof List) {
  295. return (T) toList(value);
  296. }
  297. if (Set.class.isAssignableFrom(tClass) && value instanceof Set) {
  298. return (T) toSet(value);
  299. }
  300. if (Queue.class.isAssignableFrom(tClass) && value instanceof Queue) {
  301. return (T) toQueue(value);
  302. }
  303. if (Collection.class.isAssignableFrom(tClass) && value instanceof Collection) {
  304. return (T) toCollection(value);
  305. }
  306. // 如果是基本类型,则按照基本类型处理
  307. if (value.getClass().isPrimitive()) {
  308. return castStr(tClass, (String)(value));
  309. }
  310. // value为String类型,则最后按照实体类型的json进行转换
  311. if(String.class.isAssignableFrom(value.getClass())) {
  312. String valueStr = (String) value;
  313. if(YamlUtil.isJsonObject(valueStr)) {
  314. return JSON.parseObject((String) value, tClass);
  315. } else if(YamlUtil.isJsonArray(valueStr)) {
  316. return JSON.parseArray((String) value, tClass);
  317. } else if(YamlUtil.isProperties(valueStr)) {
  318. return cast(tClass, YamlUtil.yamlToJson(YamlUtil.propertiesToYaml(valueStr)));
  319. } else if(YamlUtil.isYaml(valueStr)) {
  320. return cast(tClass, YamlUtil.yamlToJson(valueStr));
  321. }
  322. }
  323. if (Properties.class.isAssignableFrom(value.getClass())) {
  324. return cast(tClass, YamlUtil.propertiesToJson((Properties)value));
  325. }
  326. // value为 map 类型,则直接转换
  327. if(Map.class.isAssignableFrom(value.getClass())) {
  328. JSONObject jsonObject = new JSONObject();
  329. jsonObject.putAll((Map) value);
  330. return jsonObject.toJavaObject(tClass);
  331. }
  332. throw new ClassCastException("值 " + value + " 向类型 " + tClass.getName() + " 转换异常");
  333. }
  334. /**
  335. * 将对象的数据,按照cls类型进行转换
  336. *
  337. * @param cls 待转换的Class类型
  338. * @param data 数据
  339. * @param <T> 返回类型
  340. * @return Class类型对应的对象
  341. */
  342. public <T> T castStr(Class<T> cls, String data) {
  343. if (cls.equals(String.class)) {
  344. // 针对data为null的情况进行转换
  345. if (NULL_STR.equals(data)) {
  346. return null;
  347. }
  348. return cls.cast(data);
  349. } else if (Character.class.isAssignableFrom(cls)) {
  350. return cls.cast(data.toCharArray());
  351. } else {
  352. try {
  353. if (NULL_STR.equals(data)) {
  354. return null;
  355. }
  356. return cls.cast(cls.getMethod("valueOf", String.class).invoke(null, data));
  357. } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
  358. log.error(CONFIG_LOG_PRE + "castStr error", e);
  359. }
  360. return null;
  361. }
  362. }
  363. /**
  364. * 对象是否为空
  365. * <p>
  366. * 种情况:
  367. * <ul>
  368. * <li>1.为null,则为空</li>
  369. * <li>2.为字符类型,则如果为空字符,则为空</li>
  370. * <li>3.为集合类型,则如果集合个数为空,则为空</li>
  371. * </ul>
  372. *
  373. * @param object 待核查对象
  374. * @return true:为空,false:不空
  375. */
  376. @SuppressWarnings("rawtypes")
  377. public Boolean isEmpty(Object object) {
  378. if (null == object) {
  379. return true;
  380. }
  381. if (object instanceof String) {
  382. String valueStr = (String) object;
  383. return "".equals(valueStr);
  384. }
  385. if (object instanceof Collection) {
  386. Collection collection = (Collection) object;
  387. return collection.isEmpty();
  388. }
  389. return false;
  390. }
  391. public Boolean isNotEmpty(Object object) {
  392. return !isEmpty(object);
  393. }
  394. }

yamlUtil
见这里