繁体   English   中英

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

[英]What is the pattern used in this class?

我想知道这段代码中的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

感谢您的阅读!

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

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

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

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

暂无
暂无

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

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