Here you can find the source of newInstance(Class> clazz)
public static Object newInstance(Class<?> clazz) throws InstantiationException, IllegalAccessException
//package com.java2s; /*//www. ja v a 2 s . co m * Copyright (C) 2002, 2004 Takao Nakaguchi. * * This is a program for Language Grid Core Node. This combines multiple language resources and provides composite language services. * Copyright (C) 2005-2008 NICT Language Grid Project. * Copyright (C) 2014 Language Grid Project. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 2.1 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.lang.reflect.Array; import java.util.Calendar; import java.util.HashMap; import java.util.Map; public class Main { private static Map<String, Class<?>> nameToPrimitiveClass = new HashMap<String, Class<?>>(); private static Map<String, Class<?>> primitiveToWrapperClass = new HashMap<String, Class<?>>(); private static Map<Class<?>, Object> primitiveToDefault = new HashMap<Class<?>, Object>(); public static Object newInstance(Class<?> clazz) throws InstantiationException, IllegalAccessException { if (clazz.isPrimitive()) { return primitiveToDefault.get(clazz); } else if (Calendar.class.isAssignableFrom(clazz)) { return Calendar.getInstance(); } else if (clazz.isArray()) { Class<?> ct = clazz.getComponentType(); Object a = Array.newInstance(ct, 1); Array.set(a, 0, newInstance(ct)); return a; } return clazz.newInstance(); } /** * * */ public static boolean isPrimitive(String className) { return nameToPrimitiveClass.containsKey(className); } /** * * */ public static boolean isAssignableFrom(Class<?> class1, Class<?> class2) { if (class1.isAssignableFrom(class2)) return true; if (!class1.isPrimitive()) return false; Class<?> wrapper = primitiveToWrapperClass.get(class1.getName()); return wrapper.isAssignableFrom(class2); } }