Java仅通过一个对象发送类参数

标签 java

可以创建一个“仅用于参数”的对象吗?例如:

class MyClass {
    public String a;
    public Number b;

    public MyClass(Object params) {
        this.a = params.a !== null ? params.a : "default";
        this.b = params.b !== null ? params.b : 0;
    }
}

void main() {
    MyClass myclass1 = new MyClass(new Object() {
        String a = "hey";
    });

    MyClass myclass2 = new MyClass(new Object() {
        Number b = 123;
    });

    MyClass myclass3 = new MyClass(new Object() {
        String a = "!!!";
        Number b = 5;
    });
}

显然这段代码不起作用,我尝试了很多方法尝试复制它,也许使用模板(通用)?

预期结果是:

myclass1.a == "hey";
myclass1.b == 0;

myclass2.a == "default";
myclass2.b == 123;

myclass3.a == "!!!";
myclass3.b == 5;

最佳答案

您可以使用 Builder pattern创建所需的实例:

public final class MyClass {

    private final String str;
    private final Number number;

    public static Builder builder() {
        return new Builder();
    }

    private MyClass(Builder builder) {
        str = builder.str;
        number = builder.number;
    }

    public String getStr() {
        return str;
    }

    public Number getNumber() {
        return number;
    }

    public static final class Builder {

        private String str = "default";
        private Number number = 0;

        private Builder() {
        }

        public MyClass build() {
            return new MyClass(this);
        }

        public Builder str(String str) {
            this.str = str;
            return this;
        }

        public Builder number(Number number) {
            this.number = number;
            return this;
        }

    }
}
<小时/>

演示:

public static void main(String... args) {
    MyClass myclass1 = MyClass.builder().str("hey").build();
    MyClass myclass2 = MyClass.builder().number(123).build();
    MyClass myclass3 = MyClass.builder().str("!!!").number(5).build();
}
<小时/>

如果您不想使用Builder pattern ,您可以使用类覆盖:

public class MyClass {

    public String getStr() {
        return "default";
    }

    public Number getNumber() {
        return 0;
    }

}

public static void main(String... args) throws IOException {
    MyClass myclass1 = new MyClass() {
        @Override
        public String getStr() {
            return "hey";
        }
    };

    MyClass myclass2 = new MyClass() {
        @Override
        public String getStr() {
            return "hey";
        }

        @Override
        public Number getNumber() {
            return 123;
        }
    };

    MyClass myclass3 = new MyClass() {
        @Override
        public String getStr() {
            return "!!!";
        }

        @Override
        public Number getNumber() {
            return 5;
        }
    };
}

关于Java仅通过一个对象发送类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60388683/

相关文章:

java - mapreduce 中永无止境的工作

java - 当我使用字符串进行切换时出现错误

java - 开始制作Android应用程序

java - 工厂类应该是单例还是静态方法?

java - dropwizard 中未生成日志文件

java - 编译java程序时出现错误

如果系统属性值包含空格,java getInputArguments() 返回尴尬的结果

java - Android R.java ID开关总是给出默认值

java - 如何使用@ExceptionHandler 捕获HTTP 405 "Method Not Allowed"异常?

java - pdfbox和itext无法提取图像