此类中使用的模式是什么?

时间:2019-07-15 05:59:57

标签: java oop generics design-patterns

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

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

感谢您的阅读!

1 个答案:

答案 0 :(得分:0)

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

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

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

您可以通过以下链接了解有关Java中泛型的更多信息: