Here you can find the source of newInstance(Class
Parameter | Description |
---|---|
theCls | class of which an object is created. |
@SuppressWarnings("unchecked") public static <T> T newInstance(Class<T> theCls)
//package com.java2s; /*/*from w ww. j a va2s . c o m*/ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ import java.lang.reflect.Constructor; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class Main { private static final Map<Class<?>, Constructor<?>> constructorCache = new ConcurrentHashMap<Class<?>, Constructor<?>>(); /** * Create an object for the given class. * * @param theCls * class of which an object is created. * @return a new object */ @SuppressWarnings("unchecked") public static <T> T newInstance(Class<T> theCls) { T result; try { Constructor<T> meth = (Constructor<T>) constructorCache.get(theCls); if (null == meth) { meth = theCls.getDeclaredConstructor(); meth.setAccessible(true); constructorCache.put(theCls, meth); } result = meth.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } return result; } /** * Create an object using the given class name. * * @param clsName * class name of which an object is created. * @param xface * The interface implemented by the named class. * @return a new object */ @SuppressWarnings("unchecked") public static <T> T newInstance(String clsName, Class<T> xface) { Class<?> theCls; try { theCls = Class.forName(clsName); } catch (ClassNotFoundException cnfe) { throw new RuntimeException(cnfe); } if (!xface.isAssignableFrom(theCls)) { throw new RuntimeException(clsName + " not " + xface.getName()); } return newInstance(theCls.asSubclass(xface)); } }