public Object return(String a)
    {
        if(a.equals("aa"))
            return new AA();
        if(a.equals("bb"))
            return new BB();
        else
            return null;
    }

解决方案 »

  1.   

    现在就是不想用if作为判断,因为变量a的值不确定,而且用了if这样,程序的灵活性会降低,因为以后如果添加了类,那么你就的增加if的判段
      

  2.   

    模式就不太懂了,不过反正都是调用 类名.ddd(); 吗,用HashMap啊,把a中的值作为key,把其所对应类的对象做为value,用的时候直接用a提取出来就行了
      

  3.   


    public abstract class Poly { void WhoAmI(){};
    }public class Poly_A extends Poly{
    void WhoAmI(){
    System.out.println("I am Poly_A");


    }
    }
    public class Poly_B extends Poly{
    void WhoAmI(){
    System.out.println("I am Poly_B");


    }
    }
    import java.util.*;public class JLauncher { public static void main(String[] args) {
    // TODO Auto-generated method stub
    try{
    Class poly=Class.forName("Poly_A");
    ((Poly)poly.newInstance()).WhoAmI();

    poly=Class.forName("Poly_B");
    ((Poly)poly.newInstance()).WhoAmI();

    }catch(Exception exc){
    exc.printStackTrace();

    }
    }}此程序演示了如何动态产生对象
      

  4.   

    interface Iddd {
      void ddd();
    }class aa implements Iddd {
      ...
    }class bb implements Iddd {
      ...
    }class cc implements Iddd {
      ...
    }Class clazz = Class.forName(className);
    Object obj = class.newInstance();
    if (obj instanceof Iddd)
       ((Iddd)obj).ddd();针对特定的需求才能进行合理的设计,楼主没有描述需求,这是顺着楼主的思路走的。
      

  5.   

    你可以去研究一下Struts的类反射机制,就是根据类名称构造生成一个类,然后利用getMethod()方法根据方法名参数进行处理,这样的话调用类和相关的方法就可以只需要改变参数进行调用了,下面有我以前写的一个调用方式,你可以参考一下。
      /**
       *
       * @param daoObject               //需要实现的相关类
       * @param updateFieldName         //方法名称
       * @param updateFieldValue        //获得内容
       * @return
       */
      public static String getParaFromObj ( Object curObj ,String FieldName ) throws Exception
      {
        String retFieldValue = "";
        try {
          Class curClass = curObj.getClass ();
          // Find the method to call, and its parameter type
          Method m = curClass.getMethod ( "get" + FieldName ,null );
          // Try to invoke
          Object object = m.invoke ( curObj ,null );
          if ( object != null ) {
            retFieldValue = String.valueOf ( object ).trim ();
          } else {
            retFieldValue = "";
          }
        } catch ( SecurityException e ) {
          logger.debug ( e.getMessage () );
          return "";
        } catch ( NoSuchMethodException ex ) {
          logger.debug ( ex.getMessage () );
          return "";
        }
        return retFieldValue;
      }上面的内容只是提供了一个思路,结合Struts的反射机制,可以达到你所设想的要求。以前我们的项目中就存在你所的内容,用这种方式,我们调用的时候(例如从一个form bean中取值)
    String hesunName = WSObjectUtil.getParaFromObj ( viewcheckform ,"HESUN_NAME" );
    就完成了一个取值过程。
      

  6.   

    严重支持
    congliu(取次花丛都不顾,半缘修道半缘君。) ( )
      

  7.   

    典型的简单工厂模式用法嘛。
    尽可能的做到之增加类就可以(相当于在系统动态配置类吧)是很简单的事情。
    比如:
    InitialContext ic = new InitialContext();
    String className = (String) ic.lookup(JNDINames);
    Class.forName(className).newInstance();
    JNDI配置类名