首页 > 解决方案 > 这个类中使用的模式是什么?

问题描述

我想知道这段代码中的模式是什么。

我正在分析一个名为 web3j 的库。

这是此来源的代码:

public interface FilterTopic<T>
{
    @JsonValue
    T getValue();
}

public static class SingleTopic implements FilterTopic<String>
{
    private String topic;

    public SingleTopic()
    {
        this.topic = null;
    }
    public SingleTopic(String topic)
    {
        this.topic = topic;
    }

    @Override
    public String getValue() {
        // TODO Auto-generated method stub
        return topic;
    }

}

public static class ListTopic implements FilterTopic<List<SingleTopic>>
{
    private List<SingleTopic> topics;

    public ListTopic(String… optionalTopics)
    {
        topics = new ArrayList<>();
        for(String topic : optionalTopics)
        {
            if(topic != null) topics.add(new SingleTopic(topic));
            else topics.add(new SingleTopic());
        }
    }

    @Override
    public List<SingleTopic> getValue() {
        // TODO Auto-generated method stub
        return topics;
    }   
}

可以看到FilterTopic界面。它有几个使用静态类的返回值。这是什么图案?

如果您想查看完整代码,请查看此处 https://github.com/KoangHoYeom/Ethereum-JSONRPC-With-Java-Ex/blob/master/src/main/java/org/BlockChainService/domain/dto/Filter .java

感谢您的阅读!

标签: javaoopgenericsdesign-patterns

解决方案


它只是一个普通的面向对象代码,并且使用简单的继承。但是,如果您的意思是相同的方法定义如何具有不同的返回值,那么您需要查看有关 Java 中的泛型的教程。

作为一个简短的回答,原始方法接受一个类型作为一对 < 和 > ( FilterTopic<T>) 中的参数。这T可以是任何类型(例如 Object、String、List 等),并且您可以看到该getValue()方法也返回相同的类型(T)。您可以使用任何字符或名称来代替 T,它只是一个占位符(如变量名)。

然后每个子类在实现这个接口时,指定这个参数的确切类型名称。这意味着getValue()该类的方法应该返回完全相同的类型。所以SingleTopic是使用<String>then 定义的,它的getValue()方法应该返回StringListTopic是使用项目列表定义的,SingleTopic然后它getValue()必须返回一个这样的列表。

您可以在以下链接中阅读有关 java 中的泛型的更多信息:


推荐阅读