[英]Java How would you use instanceof to return a new object types?
如果您有以下內容
如何創建一個方法來接受其中一個對象類型以返回適當的對象?
例:
Method makeFood(HotDog)
if(HotDog instanceof Meal)
return new HotdogObject();
你怎么做到這一點?
我正在和我一起工作
static public Food createMeal(Meal f)
throws Exception
{
if (f instanceof Hotdog)
{
return f = new HotDog();
}
if (f instanceof Burger)
{
return f = new Burger();
}
throw new Exception("NotAFood!");
}
大多數情況下,您會將類與其實例混淆。 正如其名稱所示, instanceof
運算符驗證對象是類的實例,而不是類是另一個類的子類。 通過反思,您可以最優雅地解決您的特定問題:
public static <T extends Meal> T createMeal(Class<T> c) {
try { return c.newInstance(); }
catch (Exception e) { throw new RuntimeException(e); }
}
例如,如果您想要Burger
,請致電
Burger b = createMeal(Burger.class);
但是,如果你真的只想要一個與你已經擁有的實例相同類型的另一個實例,那么代碼就是
public static Meal createMeal(Meal x) {
try { return x.getClass().newInstance(); }
catch (Exception e) { throw new RuntimeException(e); }
}
如果我理解正確你想要這樣的東西?
if(f.getClass().isAssignableFrom(HotDog.class))
return new HotdogObject();
我想你指的是反思。 看看這個鏈接http://java.sun.com/developer/technicalArticles/ALT/Reflection/
import java.lang.reflect.*;
public class constructor2 {
public constructor2()
{
}
public constructor2(int a, int b)
{
System.out.println(
"a = " + a + " b = " + b);
}
public static void main(String args[])
{
try {
Class cls = Class.forName("constructor2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Constructor ct
= cls.getConstructor(partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = ct.newInstance(arglist);
}
catch (Throwable e) {
System.err.println(e);
}
}
}
試試Class的類方法: static Class<?> forName(String class_name)
用於返回與instanceof condition匹配的類的對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.