Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果一个java方法接受(对象,对象…),有没有一种方法可以将单个参数提供给它?_Java_Variadic Functions - Fatal编程技术网

如果一个java方法接受(对象,对象…),有没有一种方法可以将单个参数提供给它?

如果一个java方法接受(对象,对象…),有没有一种方法可以将单个参数提供给它?,java,variadic-functions,Java,Variadic Functions,我有一个第三方库(Springfox,但这里哪一个并不重要),它的方法带有签名标记(先标记,标记…剩余)。因为我需要在这个方法中输入十几个标记,所以为了可读性和可维护性,我想将其拆分为一个单独的方法: public Tag[] generateTags(){ return new Tag[]{ new Tag("Tag1", "Tag 1 Description"), // other tags }; } 问题是我不能简单地将Tag[]数组输入到

我有一个第三方库(Springfox,但这里哪一个并不重要),它的方法带有签名
标记(先标记,标记…剩余)
。因为我需要在这个方法中输入十几个标记,所以为了可读性和可维护性,我想将其拆分为一个单独的方法:

public Tag[] generateTags(){
    return new Tag[]{
        new Tag("Tag1", "Tag 1 Description"),
        // other tags
    };
}
问题是我不能简单地将Tag[]数组输入到第三方库方法中,因为它与标记(Tag,Tag…)的方法签名不匹配。我发现了错误

类型摘要中的方法标记(标记,标记…)不适用于参数(标记[])

在编译时。这当然是完全可以预料到的,尽管我觉得有点奇怪,Java编译器没有意识到varArgs参数与前面的参数是同一类型的,并且允许数组同时填充这两个参数


除了在tags()调用中定义第一个标记,然后在外部方法中定义其他标记的简单解决方案之外,还有其他解决方案吗?

您可以编写一个包装器方法来解决您的问题。只需从数组中拆分第一个标记,并将其余标记输入第二个参数:

public void tagsWrapper(Tag[] tags){
    Tag first = tags[0];
    Tag[] other = Arrays.copyOfRange(tags, 1, tags.length);
    tags(first, other);
}

因此,问题是在调用
签名
方法的行中出现编译时错误?请详细解释您的问题。。。你到底需要什么?从对象数组到具有该数组中的参数的方法?类似这样的内容:对象[]数据=新对象[]{new Object(),new Object()};-->yourLib.method(数据[0],数据[1]);这就是你想要达到的吗?@AdamSiemion是的。我已经添加了我得到的具体错误。我可能不是第一个在Java中遇到变量函数问题的人,但是我很惊讶还没有人问过这个问题。@fitDeveloper类似的问题,但是由于第二个参数是数据[1],它需要将数组的其余部分放在那里,所以除了数据[0]之外的所有东西都在那里。@Nzal第一个参数不是vararg,因此,您必须像
tags(t,a)
那样调用它,其中
t
Tag
a
Tag
的数组,我最后使用了这个答案的核心,即使用数组索引和array.copyOfRange将参数传递到函数中。包装器方法不太有效,因为tags方法是构建器模式的一部分,所以我不能轻易地在它周围放置包装器。