私有静态变量是必需的公共setter吗?

ada*_*ada 3 java

/* Atleast is it needed in this case?*/
 public class Service
{       
         private static List<String> subscribedFields;
    private static List<String> unsubscribedFields;
         //---------------------------------  
         // is this necessary?
         //---------------------------------
    public static void setFields(List<String> subscribedFields, List<String> unsubscribedFields)
    {
        Service.subscribedFields = subscribedFields;
        Service.unsubscribedFields = unsubscribedFields;
    }
    public static List<String> getSubscribedFields()
    {
        return subscribedFields;
    }
    public static List<String> getUnsubscribedFields()
    {
        return unsubscribedFields;
    }
}
// some other class
public class User{
     // Is this not enough to change the lists? Isn't the setter redundant? 
     Change(Service.getSubscribedFields());
     Change(Service.getUnsubscribedFields());

}
Run Code Online (Sandbox Code Playgroud)

Jas*_*Cav 6

不,私有变量并不总是需要公共setter.提供公共setter(以及getter)的想法是基于 - 类等外部实体需要访问您正在编写的特定代码段的内部.Getter和setter为此提供了公共接口.但是,您不一定需要为您创建的每个私有变量提供公共getter或setter,因为该私有变量可能仅存在于该类的内部私有用途.

您必须根据代码的特定需求决定是否特别需要访问您的私有变量.

根据评论中的ada问题进行更新

您可以直接授予用户访问列表的权限(是的 - 他们可以使用getter然后编辑列表).如果您信任代码的用户,这可能会有效.但是,由于各种原因,您可能不希望让他们直接访问您的列表(特别是因为它让他们自由地执行他们想要做的事情,如果您在应用程序中有线程,它可能会产生问题等) .在这种情况下,您应该在基础列表中提供接口.例如,在您的类中,您可能希望提供以下方法,而不是提供getSubscribedFields().

// Pseudocode
public String getSubscribedField(int i) {
  return subscribedFields.Get(i);
}

public String addSubscribedField(String field) {
  subscribedFields.Add(field);
}
Run Code Online (Sandbox Code Playgroud)

希望这有助于为您澄清一些事情.