【问题标题】:Getting access to class properties from within class methods - Java从类方法中访问类属性 - Java
【发布时间】:2013-07-02 13:05:22
【问题描述】:

我有以下代码:

public class UserRepository 
{       
    private MyDataSource myDataSource = new MyDataSource();

    public static User CreateUser( int id, String firstName, String lastName )
    {
         myDataSource.propertyOfThis...
         // myDataSource is not accessible and yet i have declared it as a property of UserRespository?
    }
...

我在这里错过了什么?

【问题讨论】:

    标签: java class scope


    【解决方案1】:

    myDataSource 不是static

    private MyDataSource myDataSource = new MyDataSource();
    

    但是CreateUserstatic

    public static User CreateUser( int id, String firstName, String lastName )
    

    所以制作myDataSource static 或删除CreateUserstatic 修饰符。

    哦,或者new UserRepository()

    【讨论】:

    • 所以我认为我不应该声明一个新的数据源,因为它是静态的..
    • 哦,或者new UserRepository()
    【解决方案2】:

    您需要将 myDataSource 设为静态。可以在不创建实例的情况下调用静态方法,并且由于 myDataSource 是实例变量,因此无法访问。

    【讨论】:

      【解决方案3】:

      您的方法 CreateUser 是静态的,而 MyDataSource 是实例字段

      【讨论】:

        【解决方案4】:

        问题是您的字段不是static,但您在static 方法中使用它。

        问题在于static 方法不是在类(对象)的实例上执行,而是在类本身上执行。字段仅存在于对象中。因此,该方法不必是静态的,或者字段应该是静态的。取决于您的用例。

        【讨论】:

          【解决方案5】:

          你的方法是static。如前所述,您不能从静态方法中访问非静态方法或变量。

          这样做的原因是静态成员和方法无需实例化类即可访问。但是,那些非静态(又名“实例”)变量属于该类的特定实例。因此,您必须有一个实例化的对象来引用才能获取变量。

          如果您处于静态代码块中,则出于同样的原因,您不能使用关键字thisthis 指的是该类的特定实例化对象。

          【讨论】:

            【解决方案6】:

            *问题是你的字段不是静态的,但是你在静态方法中使用它。*问题是静态方法不是在类的实例(对象),但在类本身。

            【讨论】:

              猜你喜欢
              • 2011-08-11
              • 2021-11-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-07-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多