Java:如何在一个定义中组合具有多个签名的方法?

Java:如何在一个定义中组合具有多个签名的方法?,java,methods,syntax,parameters,signature,Java,Methods,Syntax,Parameters,Signature,在给定的类中,我有.methodA()或方法a(参数) 这不仅仅是一种方法,大约有20种方法 因此,我不想使用重载,因为这将导致约30%的代码膨胀 我发现了一些相关的问题,但其中一些是关于1-n的一些参数。。。我有没有参数的方法调用。 其他的问题只是说我不能也需要使用重载,但是这些问题已经存在了好几年了——也许Java神从那时起就慷慨大方了 ()有时人们看到一张地图正在经过;原始的。但是考虑到你正在谈论的可能是20种参数的变化,比如属性,一个没有经过严格处理的映射,可能还可以。这甚至可以作为键-

在给定的类中,我有
.methodA()
方法a(参数)
这不仅仅是一种方法,大约有20种方法

因此,我不想使用重载,因为这将导致约30%的代码膨胀

我发现了一些相关的问题,但其中一些是关于1-n的一些参数。。。我有没有参数的方法调用。 其他的问题只是说我不能也需要使用重载,但是这些问题已经存在了好几年了——也许Java神从那时起就慷慨大方了


()

有时人们看到一张地图正在经过;原始的。但是考虑到你正在谈论的可能是20种参数的变化,比如属性,一个没有经过严格处理的映射,可能还可以。这甚至可以作为键-值对的流畅api传递。自java 9以来:

obj.method(Map.of("a", 1,
                  "b", 2,
                  "c", 3));
有一种解决方案非常冗长,将所有参数存储在自己的类中, 但允许完整性约束和检查,例如通过A或通过B和C,将A设置为f(B,C)

您可以使用生成器模式。它在最后带有一个对象创建,其中的字段包含所有可能的参数

在使用构建器时有几种不同的方法。最适用于这种情况的是:

void method(Param param) { ... }

public class Param {

    public final String s;
    public final int x;
    public final int y;

    private Param(String s, int x, int y) {
        this.s = s;
        this.x = x;
        this.y = y;
    }

    public static ParamBuilder newParam() { // Possibly obligatary parameters.
        return new ParamBuilder(); 
    }
这确保使用特殊的构建来开始构建参数

    public static class ParamBuilder {
        private String s;
        private int x;
        private int y;

        private ParamBuilder() { };

        public ParamBuilder withS(String s) {
            ...; return this;
        }

        public ParamBuilder withXY(int x, int y) {
            ...; return this;
        }

        public Param build() {
            // Possible integrity checks for completeness.
            return new Param(s, x,  y);
        }
    }
}
用法:

object.method(Param.newParam().withXY(3, 4).withZ(5).build());
object.pMethod().withXY(3, 4).withZ(5)).call();
//        |                              |
//      newParam                       method(build())

你能展示一些代码来说明这个问题吗?Varargs也可以使用0个参数,例如
methodA(String…strings)
也可以接受0个参数,而不仅仅是1-n个参数。没有代码示例很难回答你的问题。我非常喜欢在获得免费建议之前展示工作,但是在这种情况下,我已经展示了理解问题在逻辑上需要的所有代码。我的意思是,我可以举一个方法重载的例子,但这对任何人都没有用处。你怎么称呼这个“…”语法?什么时候引入的?@DraxDomax它被称为变量参数(Varargs),是在Java 5中引入的。Joe,我真的很想接受你的回答,请你看看表达式应该是“Object…args”还是“Object…args”。我在代码中使用了后者(取得了巨大成功),但不确定哪种语法是正确的
object.method(Param.newParam().withXY(3, 4).withZ(5).build());
object.pMethod().withXY(3, 4).withZ(5)).call();
//        |                              |
//      newParam                       method(build())