簡體   English   中英

Java如何使用instanceof返回新的對象類型?

[英]Java How would you use instanceof to return a new object types?

如果您有以下內容

  1. 界面:用餐
  2. 熱狗執行用餐
  3. 漢堡實現了膳食
  4. 沙拉實施膳食

如何創建一個方法來接受其中一個對象類型以返回適當的對象?

例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM