【问题标题】:Are static setter/getters allowed?是否允许使用静态设置器/获取器?
【发布时间】:2011-11-17 11:41:28
【问题描述】:

我正在开发一个 Web 应用程序,其中有一个名为 getData() 的实用程序方法,我将其设为静态。 到现在为止还不错,但是这个名为 getData() 的静态方法需要一些来自 setter 和 getter 的数据。 所以现在我的问题是我们可以将 setter/getter 设为静态吗?

【问题讨论】:

    标签: java web-applications


    【解决方案1】:

    如果您的属性是static,那么Getters and setters 也将是static.. 这完全取决于您..

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        是的,你可以和那个类,无论定义了那个对象/变量,它们看起来像

        private static String abc = "";
        

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

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

        你可以这样使用Test.getString(); or Test.setString("new string");

        您也可以将这个 get/set 方法定义为正常方式,而不定义 static 关键字,但为此您需要创建该类的实例。静态用于不创建可以访问其成员的类的实例。

        【讨论】:

          【解决方案4】:

          当然,您可以将 getter 和 setter 设为静态(使用适当的静态字段)。

          但是:当您处理 Web 应用程序(多个并行请求 - 多个线程)时,您肯定会遇到线程问题 - 这不是线程安全的,除非你照顾(例如使用synchronized)。

          【讨论】:

          • 如何使用静态 getter 来检索地图?是否需要同步单个操作?
          • 取决于您是否会更改地图的数据。制作最终的地图,你会没事的!
          【解决方案5】:

          当然可以。 getter 和 setter 只是普通的方法。 它们可以是静态的,也可以不是。

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

          【讨论】:

            【解决方案6】:

            是的,只要类变量和方法都设为静态,就允许使用静态 setter/getter。看看这个 getter 方法示例。

            public class Test {
              private static WebDriver driver;
            
            
            public static WebDriver getDriver() {
                return driver;
            

            【讨论】:

              【解决方案7】:

              是的,getter/setter 可以根据您的需要设为静态。或者我没听懂你的问题!

              【讨论】:

              • 您不能从静态方法访问实例字段。
              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-07-23
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多