java - 这个类中使用的模式是什么?
问题描述
我想知道这段代码中的模式是什么。
我正在分析一个名为 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()
该类的方法应该返回完全相同的类型。所以SingleTopic
是使用<String>
then 定义的,它的getValue()
方法应该返回String
。ListTopic
是使用项目列表定义的,SingleTopic
然后它getValue()
必须返回一个这样的列表。
您可以在以下链接中阅读有关 java 中的泛型的更多信息:
推荐阅读
- c - spin_unlock 成功,内核模块中没有 spin_lock
- spring-boot - 我们可以从 Bean 配置中关闭和打开连接吗?
- amazon-web-services - Boto3 run_instances:如何指定多个子网?
- unity3d - 广告未在统一仪表板中连接
- php - PHP/MySQL/MariaDB - TINYINT 上的单引号与无引号;具有不同行为的两台服务器
- flutter - Flutter:返回widget的函数和创建类的Extract Widget有区别吗?
- jenkins - Groovy 在 Jenkins 中没有按预期运行
- github - 在 Github Actions 中获取当前推送的标签
- python - pygame错误:视频系统未初始化
- swift - 如何快速修剪一串空白和空值?