Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!.POSTED!not-for-mail From: Abu Yahya Newsgroups: comp.lang.java.programmer Subject: Class.forName().newInstance() vs new Date: Sat, 11 Jun 2011 22:43:59 +0530 Organization: Aioe.org NNTP Server Lines: 33 Message-ID: NNTP-Posting-Host: VXdcwsc5kgxY1YKHPVeYyQ.user.speranza.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.17) Gecko/20110414 Thunderbird/3.1.10 X-Notice: Filtered by postfilter v. 0.8.2 Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:5205 I have a class that instantiates a private member based on a value in a configuration file. The value is used to determine the class name. I initially decided to use code similar to the following: // class name comes from property file String dbMgrClassName = props.getProperty("db.manager"); Class k = Class.forName(dbMgrClassName); db = (DB) k.newInstance(); db.init(props); However, a colleague pointed out that using "new" is faster than using "Class.forName().newInstance()". So, I changed the code to the following: String dbMgrClassName = props.getProperty("db.manager"); if (dbMgrClassName.equals("DB2")) db = new DB2(); else if (dbMgrClassName.equals("Oracle")) db = new Oracle(); else if (dbMgrClassName.equals("SQLServer")) db = new SQLServer(); else { // handle unrecognized Class k = Class.forName(dbMgrClassName); db = (DB) k.newInstance(); } db.init(props); My question is: Does using if-else statements like the above really improve performance? What is the best approach to instantiate classes whose type you don't know at compile time?