繁体   English   中英

在运行时更改类类型

[英]Change class type at runtime

我有两个类(让我们称之为AB ),都继承自一个公共超类( C )。

假设我需要构建一个C List 我的问题是,根据C的构造函数收到的数据,我需要在列表中放置一个AB对象。

有没有办法从C的构造函数中执行此操作? 或者,或者,我该如何解决这个问题?

这听起来像是一个使用工厂模式的好地方。 基本上,使用返回类型为C的静态方法创建一个类CFactory。然后,该方法可以决定创建A或B并返回该值。

这称为工厂模式。

工厂模式:简单来说,如果我们有一个超类和n个子类,并且基于提供的数据,我们必须返回其中一个子类的对象,我们使用工厂模式。

您的实现将类似于:

public class C {
//methods
}// End of class

public class A extends C {
//methods
}// End of class

public class B extends C {
//methods
}// End of class

public class CFactory {
     public static void main(String args[]) {
         CFactory factory = new CFactory();
         factory.getObjects(args[0]);
     }
     public C getObjects(String type) {
         if (type.equals("A"))
             return new A();
         else if(type.equals("B"))
             return new B();
         else
             return null;
     }
}// End of class

结帐示例:

http://www.allapplabs.com/java_design_patterns/factory_pattern.htm

C的构造函数无法做到这一点。 您可以在C中创建一个工厂方法,根据收到的数据创建A或B:

class C {
   public final static C newInstance(Object data) {
        if (inspect(data)) {
            return new A(data);
        }
        return new B(data);
   }
}

你为什么需要从C的构造函数中做到这一点? 移动任何逻辑确定要将哪个类型实例化到其他地方,然后在那里创建具体类型?

抽象工厂方法应该帮助您决定使用哪个C实现

public abstract class CFactory{
    public abstract C createCObject(data...){
        if (something) {
             return new A();
        }else{
            return new B();
        }
    }
}

然后你可以使用抽象工厂方法构建List ...

希望这有助于......

不能。您无法从C的构造函数创建A或B对象。

您可以使用C中的静态方法创建A或B.或者,您可以创建一些工作类来执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM