gpt4 book ai didi

java - 允许根据变量值实例化类的特定变量

转载 作者:行者123 更新时间:2023-12-02 08:38:56 25 4
gpt4 key购买 nike

我有一个用例,我必须根据变量(在本例中说)typeName 的值仅使用特定变量来实例化给定类。对于变量 String typeName,如果其值为 TYPE-1,则应仅允许实例化特定的一组变量 (a,b,c)。类似地,如果其值为 TYPE-2,则只应允许实例化另一组变量 (x,y,z)。

if(typeName == "TYPE1") 
{
CentralClass class = new CentralClass(a,b,c); //initiating only variable a,b,c
}
else
{
CentralClass class = new CentralClass(x,y,z); //initiating only variable x,y,z
}

类结构

public class CentralClass {

String typeName; //ALLOWED Values TYPE1, TYPE2
String x;
String y;
String z;

String a;
String b;
String c;
}

通过任何设计模式等来做到这一点的最佳方法是什么。

注意:类的结构可以更改。我们可以有多个类(组合不同的变量)、内部类、静态类或任何强制执行的设计模式等。

最佳答案

回答

构建器模式非常适合您的用例。它将允许您创建仅包含某些字段的对象。对于您没有的字段,最好使用构建器,而不是将“null”传递到构造函数中。

您可以使用 Lombok 快速添加所有构建器方法。

<小时/>

旁注

  • 类中只有一半的值通常表明您应该创建单独的类。
  • 当您说“typeName”只能有值“TYPE1”或“TYPE2”时,您应该使用枚举而不是字符串。这种反模式通常被称为原始痴迷
<小时/>

解决方案代码

构建器模式(不含 Lombok)

public class CentralClass {

String typeName; //ALLOWED Values TYPE1, TYPE2
String x;
String y;
String z;

String a;
String b;
String c;

CentralClass(String typeName, String x, String y, String z, String a, String b, String c) {
this.typeName = typeName;
this.x = x;
this.y = y;
this.z = z;
this.a = a;
this.b = b;
this.c = c;
}

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

public static class CentralClassBuilder {
private String typeName;
private String x;
private String y;
private String z;
private String a;
private String b;
private String c;

CentralClassBuilder() {
}

public CentralClassBuilder typeName(String typeName) {
this.typeName = typeName;
return this;
}

public CentralClassBuilder x(String x) {
this.x = x;
return this;
}

public CentralClassBuilder y(String y) {
this.y = y;
return this;
}

public CentralClassBuilder z(String z) {
this.z = z;
return this;
}

public CentralClassBuilder a(String a) {
this.a = a;
return this;
}

public CentralClassBuilder b(String b) {
this.b = b;
return this;
}

public CentralClassBuilder c(String c) {
this.c = c;
return this;
}

public CentralClass build() {
return new CentralClass(typeName, x, y, z, a, b, c);
}
}
}

构建器模式(使用 Lombok)

@Builder
public class CentralClass {

String typeName; //ALLOWED Values TYPE1, TYPE2
String x;
String y;
String z;

String a;
String b;
String c;
}

用法

if(variable == "TYPE1")
{
CentralClass aClass = CentralClass.builder()
.a("A")
.b("B")
.c("C")
.build();
}
else
{
CentralClass aClass = CentralClass.builder()
.x("X")
.y("Y")
.z("Z")
.build();
}

了解更多:

https://dzone.com/articles/design-patterns-the-builder-pattern

关于java - 允许根据变量值实例化类的特定变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61505439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com