001 /*******************************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied. See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 *******************************************************************************/
019 package org.apache.commons.convert;
020
021 /** Utility methods. */
022 public class Util {
023
024 /** Convenience method to cast parameterized types.
025 *
026 * @param <V> The type to cast to
027 * @param object The object to cast
028 * @return <code>obj</code> cast to type <code>V</code>
029 */
030 @SuppressWarnings("unchecked")
031 public static <V> V cast(Object object) {
032 return (V) object;
033 }
034
035 /**
036 * Tests if a class is the same class as, or sub-class of, or implements <code>typeClass</code>.
037 * @param objectClass Class to test
038 * @param typeClass Class to test against
039 * @return <code>true</code> if <code>objectClass</code> is the same class as, or sub-class of, or implements <code>typeClass</code>
040 */
041 public static boolean instanceOf(Class<?> objectClass, Class<?> typeClass) {
042 if (objectClass == typeClass) {
043 return true;
044 }
045 if (objectClass.isInterface()) {
046 if (typeClass.isInterface()) {
047 // objectClass == interface, typeClass == interface
048 Class<?>[] ifaces = objectClass.getInterfaces();
049 for (Class<?> iface: ifaces) {
050 if (iface == typeClass) {
051 return true;
052 }
053 }
054 } else {
055 // objectClass == interface, typeClass != interface
056 Class<?>[] ifaces = typeClass.getInterfaces();
057 for (Class<?> iface: ifaces) {
058 if (iface == objectClass) {
059 return true;
060 }
061 }
062 }
063 } else {
064 if (typeClass.isInterface()) {
065 // objectClass != interface, typeClass == interface
066 while (objectClass != null) {
067 Class<?>[] ifaces = objectClass.getInterfaces();
068 for (Class<?> iface: ifaces) {
069 if (iface == typeClass) {
070 return true;
071 }
072 }
073 objectClass = objectClass.getSuperclass();
074 }
075 } else {
076 // objectClass != interface, typeClass != interface
077 while (objectClass != null) {
078 if (objectClass == typeClass) {
079 return true;
080 }
081 objectClass = objectClass.getSuperclass();
082 }
083 }
084 }
085 return false;
086 }
087
088 /** Returns <code>true</code> if <code>str</code> is <code>null</code>
089 * or empty.
090 *
091 * @param str The <code>String</code> to test
092 * @return <code>true</code> if <code>str</code> is <code>null</code>
093 * or empty
094 */
095 public static boolean isEmpty(String str) {
096 return str == null || str.trim().length() == 0;
097 }
098
099 private Util() {}
100 }