Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何返回实现列表?_Java_Spring_Domain Driven Design - Fatal编程技术网

Java 如何返回实现列表?

Java 如何返回实现列表?,java,spring,domain-driven-design,Java,Spring,Domain Driven Design,我正在创建一个应用程序,将用于在各个商店下订单。每个商店都有不同的下单方式。现在看起来是这样的: @文档(“订单”) 公共类顺序扩展了AbstractAggregateRoot{ 私有UUID; 私人店铺; 私人产品; //已跳过其他字段和方法 } 公共抽象类商店{ 私有字符串baseUrl; 抽象无效定单(…); //已跳过其他字段和方法 } 公共类XYZShop扩展商店{ @凌驾 作废定单(…){ //方法的实现 } //已跳过其他字段和方法 } 当客户创建订单时,他应该能够选择要在哪

我正在创建一个应用程序,将用于在各个商店下订单。每个商店都有不同的下单方式。现在看起来是这样的:

@文档(“订单”)
公共类顺序扩展了AbstractAggregateRoot{
私有UUID;
私人店铺;
私人产品;
//已跳过其他字段和方法
}
公共抽象类商店{
私有字符串baseUrl;
抽象无效定单(…);
//已跳过其他字段和方法
}
公共类XYZShop扩展商店{
@凌驾
作废定单(…){
//方法的实现
}
//已跳过其他字段和方法
}
当客户创建订单时,他应该能够选择要在哪个商店下订单


如何获取可用商店的列表?或者我应该以不同的方式实现这样的逻辑吗?

我非常不方便的方法是:

public Test3()
{
    Class<?> parentClass = this.getClass().getSuperclass();
    if(Extenders.extendingClasses.containsKey(parentClass.getCanonicalName()))
    {
        Extenders.extendingClasses.get(parentClass.getCanonicalName()).add(this.getClass());
    }
    else
    {
        List<Class<?>> extenders = new ArrayList<>();
        extenders.add(this.getClass());
        Extenders.extendingClasses.put(parentClass.getCanonicalName(), extenders);
    }

}

public static void main(String[] args)
{

    Test3 tmp = new Test3();

    for(Entry<String,List<Class<?>>> entry : Extenders.extendingClasses.entrySet())
    {

        System.out.println("Class "+entry.getKey()+" is extended by: ");

        for(Class<?> clazz : entry.getValue())
        {
            System.out.print(clazz.getCanonicalName()+", ");
        }

    }

}
还有一个单身汉

public class Extenders {


    public static Map<String,List<Class<?>>> extendingClasses = new TreeMap<>();

}

在这一点上我可能是错的:但据我所知,超级类不知道它被扩展了

所以基本上更方便的方法是把这些实现的列表放在某个地方?我指的是一些属性文件或数据库。也许Class.forName(String)方法是您的一个选择。这样,您就可以通过选择店铺(例如XYZ)和后缀店铺。这仍然没有列表,但可能已经为您的用例提供了足够的功能。就个人而言,我可能会使用一个接口,并通过开关大小写或Class.forName(字符串)选择实现类型。
public class Extenders {


    public static Map<String,List<Class<?>>> extendingClasses = new TreeMap<>();

}
Class Test2 is extended by: 
Test3,