我想知道这段代码中的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
感谢您的阅读!
答案 0 :(得分:0)
这只是普通的面向对象的代码,并且使用简单的继承。但是,如果您要说的是对于同一个方法定义它如何具有不同的返回值,那么您需要看一下有关Java泛型的教程。
作为一个简短的答案,原始方法在一对<和>(FilterTopic<T>
)中接受类型作为参数。该T
可以是任何类型(例如,对象,字符串,列表等),并且您可以看到getValue()
方法也返回相同的类型(T)。您可以使用任何字符或名称来代替T,它只是一个占位符(如变量名)。
然后,在实现此接口时,每个子类将为此参数指定确切的类型名称。这意味着该类的getValue()
方法应返回完全相同的类型。因此,SingleTopic
是使用<String>
定义的,则其getValue()
方法应返回String
。 ListTopic
是使用SingleTopic
项列表定义的,然后其getValue()
必须返回这样的列表。
您可以通过以下链接了解有关Java中泛型的更多信息: