有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中向方法调用添加未知数量的参数的参数传递

我想通过在参数列表的末尾添加未知数量的参数来扩展一个方法(而不是编写一个基本上做相同事情的新方法)

如果我这样做,我是否必须更改对该方法的所有调用?我想问题是,未知参数是否包括根本没有传入参数的情况

例如,如果我有一个方法:

queryFactory(int [] typeArgs, int queryType, int[] ... args){}

我可以打电话给:

queryFactory(typeArgsInstce, queryTypeInstce)

然后,当我需要向查询调用添加参数时:

queryFactory(typeArgsInstce, queryTypeInstce, argsInstce)

其中argsInstce是包含额外参数的整数数组

我只想编辑这个方法,而不是编写一个新的方法,它做的事情几乎完全相同,只是它有一些参数要添加到查询中。我只需编写另一个方法,如果通过编辑这个方法,我将不得不更改对这个方法的每一次调用


共 (2) 个答案

  1. # 1 楼答案

    public static void main(String[] args) {
        method(1);      // <- compile error
        method(1,2);
        method(1,2,3);
        method(1,2,3,4);
    }
    
    private static void method(int i1, int i2, int...i3) {
        // do something
    }
    

    所以用文字回答这个问题:我们至少需要两个参数。这会将一个空数组“i3[]”传递给该方法。3号及以上的参数被视为数组值


    这没什么区别

    public static void main(String[] args) {
        method(new int[]{1});      // <- compile error
        method(new int[]{1},2);
        method(new int[]{1},2,new int[]{3,4});
        method(new int[]{1},2,new int[]{3,4},new int[]{5,6});
    }
    
    private static void method(int[] i1, int i2, int[]...i3) {
        // do something
    }
    

    varargs参数必须是最后一个,这样它就不会与第一个数组冲突

  2. # 2 楼答案

    我知道您不想更改方法的签名,因为您需要更改该方法的每个调用,所以您可以创建一个包含3个参数和所有代码的方法,并用2个参数重载同一个方法,但在这个方法中,您只调用包含3个参数的方法,最后一个参数将为null。我知道这不是你想要的,但你不会重复代码并更改方法的签名

    public void queryFactory(int [] typeArgs, int queryType, int... args){
         // do something
    }
    
    public void queryFactory(int [] typeArgs, int queryType){
        queryFactory(typeArgs,queryType,null);
    }