我有一个第三方库(Springfox,但这里的哪一个并不重要(,它有一个签名为tags(Tag first, Tag... remaining)
的方法。因为我需要在这个方法中输入大约十几个标签,所以为了可读性和可维护性,我想把它分成一个单独的方法:
public Tag[] generateTags(){
return new Tag[]{
new Tag("Tag1", "Tag 1 Description"),
// other tags
};
}
问题是,我不能简单地将Tag[]数组输入第三方库方法,因为它与标记的方法签名不匹配(Tag,Tag…(。我得到错误
Docket类型中的方法标记(Tag,Tag…(不适用于参数(Tag[](
编译时
。这当然是意料之中的事,不过我觉得有些奇怪的是,Java编译器没有识别出varArgs参数与之前的参数类型相同,并允许数组同时填充这两个参数。
除了在tags((调用中定义第一个标记,然后在外部方法中定义其他标记的简单解决方案之外,还有其他解决方案吗?
您可以编写一个包装器方法来解决您的问题。只需将第一个Tag从Array中分离出来,然后将其余部分输入第二个参数:
public void tagsWrapper(Tag[] tags){
Tag first = tags[0];
Tag[] other = Arrays.copyOfRange(tags, 1, tags.length);
tags(first, other);
}