【问题标题】:What is the pattern used in this class?这个类中使用的模式是什么?
【发布时间】:2019-07-15 05:59:57
【问题描述】:

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

我正在分析一个名为 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

感谢您的阅读!

【问题讨论】:

    标签: java oop generics design-patterns


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 1970-01-01
      • 2013-04-06
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2022-11-30
      • 2023-04-03
      相关资源
      最近更新 更多