0

次のコードがあります。

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?
    }
...

ここで何が欠けていますか?

4

6 に答える 6

4

myDataSourceではありませんstatic

private MyDataSource myDataSource = new MyDataSource();

しかしCreateUserstatic

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

したがって、の修飾子を作成myDataSource staticまたは削除します。CreateUserstatic

ああ、またはnew UserRepository().

于 2013-07-02T13:06:31.243 に答える
2

myDataSource を静的にする必要があります。静的メソッドはインスタンスを作成せずに呼び出すことができ、myDataSource はインスタンス変数であるためアクセスできません。

于 2013-07-02T13:07:52.510 に答える
0

*問題は、フィールドが静的ではなく、静的メソッドで使用していることです。*問題は、静的メソッドがクラス (オブジェクト) のインスタンスに対して実行されるのではなく、クラス自体に対して実行されることです。

于 2013-07-02T13:18:42.950 に答える
0

メソッドCreateUserは静的ですが、MyDataSourceはインスタンスフィールドです

于 2013-07-02T13:06:33.020 に答える
0

問題は、フィールドが ではないにもかかわらずstaticstaticメソッドで使用していることです。

問題は、staticメソッドがクラス (オブジェクト) のインスタンスではなく、クラス自体で実行されることです。フィールドはオブジェクトにのみ存在します。したがって、メソッドを静的にする必要がないか、フィールドを静的にする必要があります。ユースケースによって異なります。

于 2013-07-02T13:06:41.927 に答える
0

あなたの方法はstaticです。既に述べたように、静的メソッド内から非静的メソッドまたは変数にアクセスすることはできません。

これは、クラスをインスタンス化せずに静的メンバーとメソッドにアクセスできるためです。ただし、これらの非静的 (別名「インスタンス」) 変数は、そのクラスの特定のインスタンスに属します。したがって、変数を取得するには、インスタンス化されたオブジェクトを参照する必要があります。

コードの静的ブロックにいる場合はthis、同じ理由でキーワードを使用できません。thisそのクラスの特定のインスタンス化されたオブジェクトを参照します。

于 2013-07-02T13:10:49.923 に答える