如果您有以下
如何创建一个方法来接受其中一个对象类型以返回相应的对象?
示例:
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!");
}
答案 0 :(得分:4)
大多数情况下,您会将类与其实例混淆。 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); }
}
答案 1 :(得分:2)
如果我理解正确你想要这样的东西吗?
if(f.getClass().isAssignableFrom(HotDog.class))
return new HotdogObject();
答案 2 :(得分:2)
我猜你指的是反思。 看看这个链接 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);
}
}
}
答案 3 :(得分:1)
试用Class的类方法:static Class<?> forName(String class_name)
用于返回与instanceof condition匹配的类的对象。