Java 如何在参数对象中声明字符串,然后在get方法中返回该字符串?

Java 如何在参数对象中声明字符串,然后在get方法中返回该字符串?,java,Java,我需要一个void setupplementalinsurance(InsurancePolicy)方法来为保单设置补充保单。和保险单getSupplementalInsurance():返回该保险单的补充保险单(如果存在)。当我在对象的参数中输入字符串时,会出现一些错误 public class InsurancePolicy{ String s1 = "additional policy"; public InsurancePolicy(String s1){ this.s1

我需要一个void setupplementalinsurance(InsurancePolicy)方法来为保单设置补充保单。和保险单getSupplementalInsurance():返回该保险单的补充保险单(如果存在)。当我在对象的参数中输入字符串时,会出现一些错误

public class InsurancePolicy{
  String s1 = "additional policy";
public InsurancePolicy(String s1){
      this.s1=s1;
  }
  InsurancePolicy j=new InsurancePolicy(s1);

public void setSupplementalInsurance(InsurancePolicy policy){
    this.j=policy;
  }

 public InsurancePolicy getSupplementalInsurance(){
    return j;
  }
}

考虑用于初始化对象的代码(格式化为可读性):

这里的技术问题在第二行(初始化
j
成员变量),因为您不能使用类成员(
s1
在本例中)以这种方式初始化另一个类成员(
j
)。提供的值必须是编译时常量,如前一行中的文字字符串
“additional policy”

然而,概念上的问题是,这里甚至不需要默认值,这会导致一些重复的逻辑。该类只有一个构造函数,该构造函数有一个
String
参数。因此,每当创建类的实例时,都需要一个
字符串

因此,您可以同时解决概念问题和技术问题。概念上的问题解决了,因为您可以始终依赖提供的值,而不需要默认值。技术问题的解决在于,您可以在构造函数中而不是在类级别初始化类成员。例如:

String s1;
InsurancePolicy j;

public InsurancePolicy(String s1){
    this.s1 = s1;
    this.j = new InsurancePolicy(s1);
}
在这种情况下还需要注意以下几点:

  • 像这样的类成员可能也应该显式地
    private
    。如果需要外部访问这些成员,请创建getter/setter方法。您的类似乎已经为
    j
    提供了这样的方法,这是一个良好的开端
  • 如有必要,考虑向构造函数添加逻辑以验证提供的
    字符串
    值。也就是说,防止出现
    null
    或空字符串或任何其他可能破坏下游逻辑的情况
  • 如果用于初始化
    InsurancePolicy
    String
    值也可以从
    InsurancePolicy
    对象派生(我看没有理由不这样做),则您正在复制此处的数据。类成员
    s1
    很可能根本不需要,应该删除

请使用有意义的变量名。我假设
j
supplementalInsurance
“出现了一些bug”-也许您可以更具体一些?欢迎使用DrJava。工作目录是/Users/a1387581600/Desktop>InsurancePolicy j=new InsurancePolicy(s1)静态错误:未定义的名称“s1”>有人知道如何在交互窗格中解决此类问题吗
String s1;
InsurancePolicy j;

public InsurancePolicy(String s1){
    this.s1 = s1;
    this.j = new InsurancePolicy(s1);
}