Java - 理解方法签名

时间:2018-04-30 00:37:24

标签: java generics methods apache-kafka

应该将哪些参数发送到此Java方法:

public void resume(Collection<TopicPartition> partitions)

更多详情here

我可以看到<TopicPartition>是一个带有此签名的Java类:
TopicPartition(String topic, int partition)
但在此之后,Java上面有一个关键字partitions方法。

它是3个参数还是2个或1个?

请有人描述我应该如何阅读这种签名。

感谢。

1 个答案:

答案 0 :(得分:2)

让我们一步一步地完成它:

首先,当然只有一个名为'partitions'的参数

 public void resume(Collection<TopicPartition> partitions)
  • public是访问修饰符,这意味着此方法可以从任何地方看到

  • void是返回类型,表示没有返回值

  • resume是方法名称/标识符

Collection<TopicPartition> partitions更难以解释:

接口'集合'后跟一个Type(TopicPartitions)意味着您可以向该方法输入任何TopicPartition对象集合。 E.g:

List<TopicPartition> list = new LinkedList<>();
resume(list);  // valid, sind List or more exact LinkedList are a Collection

Queue<TopicPartition> qq = new PriorityQueue<>();
resume(qq);  // valid, sind Que or more exact PriorityQueue are a Collection

语法Collection<Type>是Java Generics的一部分,您可以仔细查看this tutorial

您在此处称为关键字('分区')的是根本没有关键字,而只是该输入参数的名称/标识符。您必须为每个参数指定一个名称 - 因此您可以在方法代码中识别它。

在这个示例中,您可以将“分区”重命名为您想要的任何内容,我会为“partCollection”之类的内容进行代码

void,return,public,private,static,class, ......这些都是关键字。

第二,TopicPartition和你在这里引用的方法是TopicPartition类的构造函数,它需要2个参数:String topicint partition而不仅仅是一个方法。

构造函数是在实例化类时调用的方法(例如使用new关键字创建对象)。

所以给你一个更详细的例子:

List<TopicPartition> list = new LinkedList<>();
list.add(new TopicPartition("part1", 1));
list.add(new TopicPartition("part2", 2));
resume(list);  
// resume has now been called with argument of a list (which is a collection) 
// containing two TopicPartition objects whit part1, part2 and 1,2 as 
// construction arguments