静态的setter/getter方法是否允许?

18

我正在开发一个Web应用程序,在其中有一个名为getData()的实用方法,我将其设为静态方法。 到目前为止都没问题,但是这个名为getData()的静态方法需要从设置器和获取器中获取一些数据。 那么我的问题是,我们能否将设置器/获取器设为静态的?

答案:不可以将setter/getter方法设为静态的。因为setter/getter方法用于访问特定对象的实例变量,而静态方法没有访问特定对象的实例变量的能力。如果将setter/getter方法设为静态的,它们将无法访问实例变量,因此会导致错误。
10个回答

32
如果您的属性是 static,那么 getters 和 setters 也将是 static。这完全取决于您想做什么。

14

是的,你可以这样做,那个类无论对象/变量是如何定义的,它们看起来都像

private static String abc = "";

你可以使用get/set方法访问此对象

public static String getString(){
    return abc;
}

public static void setString(String newAbc){
   abc = newAbc;
}

你可以这样使用它:Test.getString(); 或 Test.setString("新字符串");

你也可以像正常方式一样定义这个get/set方法,而不需要定义静态关键字,但为此你需要创建该类的实例。静态关键字用于在不创建类的实例的情况下访问其成员。


13

如果getter和setter获取/设置静态字段,它们可以是静态的。


6
当然你可以让getter和setter是静态的(使用适当的静态字段)。
但是,由于你正在处理Web应用程序(多个并行请求 - 多个线程),所以你肯定会遇到线程问题 - 这是不安全的,除非你注意(例如使用synchronized)。

一个用于检索Map的静态getter,它需要同步吗? - Alkanshel
取决于您是否更改了地图数据。将地图设为final,您就可以放心使用了! - kaiser

1

当然可以。 Getter和setter只是普通的方法。 它们可以是静态的或非静态的。

唯一的限制是,在静态方法中不要使用非静态的字段和方法。因为静态方法和静态字段属于类,而非静态方法和字段属于对象,它们是两个不同的级别。


1

是的,静态的setter/getter是允许的,只要类变量和方法都被声明为静态的即可。看一下这个getter方法的例子。

public class Test {
  private static WebDriver driver;


public static WebDriver getDriver() {
    return driver;

0
如果您的数据成员是静态的,那么您可以使用静态getter/setter。但是,如果您的数据成员不是静态的,则在getData()静态方法中调用您的非静态getter/setter。

0
使用静态的getter/ setter是允许(并且必须)用于静态字段的。这个想法是为了匹配,要么两者都是静态的,要么都不是静态的,因为与类/对象的关系在考虑之中。尝试在静态字段上使用非静态的getter或setter会导致冲突,因为值是共享的,你会看到一条消息,如“无法从静态上下文引用非静态方法'getThingA()'”。
如果你正在处理需要与类相关联而不是特定实例的数据,这将是有益的。它还促进了面向对象编程的核心支柱之一——类级别的封装,这只是一个良好的实践。此外,通过使用静态的getter和setter,您可以在以后需要时扩展这些调用,而不是修改无数其他地方的代码。

0

是的,根据您的需要,可以将getter/setter设置为静态的。或者也许我没有理解您的问题!


3
静态方法无法访问实例字段。 - StKiller

0

如果您使用任何非静态的属性或属性,则无法使getter和setter方法静态化。 如果您使用像Eclipse和Netbeans这样的IDE,它们会警告您或甚至可能不允许您编译代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接