2 つのテキスト フィールドとログイン ボタンがあるログイン ページがあります。ログイン ボタンをクリックすると、ユーザー名とパスワードが txtfield から取得され、データベース内のユーザー名とパスワードで確認されます。パスワードとユーザー名が正しければ、メイン ページに移動します。ユーザー名を取得して、メインページに名前を表示することでした。しかし、データベースをチェックしてデータベースからデータを取得するすべてのコードは、buttonActionPerformed のプライベート クラス内にあります。データベースからユーザー名を取得して変数に保存しても、プライベートクラスであるため、他のクラスからはアクセスできません。では、private クラス内で宣言した変数にアクセスするにはどうすればよいでしょうか。プライベート クラスの外部で変数を宣言し、プライベート クラス内で更新しようとしましたが、他のクラスから呼び出すと空白になります。
4 に答える
public class PrivateInformationRetreiving{
private int PrivateInfo;
public void setPrivateInfo(int PrivateInfo)
{
this.PrivateInfo=PrivateInfo;
}
public int getPrivateInfo(){return PrivateInfo;}
}
説明
まず、変数PrivateInfo
が宣言されますprivate
。これは、クラス内のメソッドだけPrivateInformationRetreiving
が について知っていることを意味しPrivateInfo
ます。
したがって、プライベート変数について知りたい場合は、メソッドを使用PrivateInfo
して行う必要がありpublic
ます。
public
要素は、クラス内だけでなく、クラス外からもアクセスできます。
なので、そのままクラス内にsetPrivateInfo()
アクセスできます。そのため、にアクセスするためのインターフェースとして、を
使用する必要があります。PrivateInfo
setPrivateInfo()
getPrivateInfo()
PrivateInfo
では、private クラス内で宣言した変数にアクセスするにはどうすればよいでしょうか。プライベート クラスの外部で変数を宣言し、プライベート クラス内で更新しようとしましたが、他のクラスから呼び出すと空白になります。
Reflection API は、プライベート変数にアクセスするために使用されます。Database というクラスがあり、そのクラスのプライベート フィールドが defPU である場合、次のようにアクセスします (そして null を設定します)。
Field defPUField = Database.class.getDeclaredField("defPU");
defPUField.setAccessible(true);
Field modsField = Field.class. .getDeclaredField("modifiers");
modsField.setAccessible(true);
modsField.setInt(defPUField, 10);
defPUField.set(null, testVal);
舞台裏でdp4jを使用して、Reflection コードを生成することをお勧めします。
@com.dp4j.TestPrivates
void aMethod(){
Database.defPU = null;
}
ログインに成功したら、ユーザーデータをセッションに配置してからリダイレクトします。現在ログオンしているユーザーの名前が必要な場合に、データベースへの別の要求を作成する必要がないため、より高速で効率的です。
プライベートとして宣言している場合、クラス コンテキストの外ではアクセスできません。
オプションは、パブリックゲッター/セッターを公開して、変数と対話することです。
public class MyClass {
private int x;
public int getX(){
return x;
}
public void setX(int value){
x = value;
}
}