私はArrayList
というbuilding
というスーパークラスのインスタンスを格納しています(Residence
)。 (この時点では、Manager
というサブクラスのうちの1つしか定義していません)。私がしようとしているのは、位置がm
(マネージャーの略)の場合、テキストファイルから読み込み、 "mng"タイプのマネージャーと呼ばれるオブジェクトを作成し、building
に保管することです。私はファイルを読むときに問題はありませんが、一度私のコンストラクタに値を挿入すると、値はnullになります。ここ私はオブジェクト属性の値を定義しましたが、それらはすべてnullになりますが、なぜですか?
は私の居住クラスです:
public class Residence {
String posision;
String username;
String pass;
String accNo;
String type;
String no;
public Residence(String p, String u, String pas, String acc, String type, String no) {
this.posision = p;
this.username = u;
this.pass = pas;
this.accNo = acc;
this.type = type;
this.no = no;
}
public Residence() {}
}
マネージャークラス:
public class Manager extends Residence {
public String posision;
public String username;
public String pass;
public String accNo;
public String type;
public String no;
public Manager() {
super();
}
public Manager(String p, String u, String pas, String acc, String type, String no) {
super(p , u , pas, acc, type , no);
}
public String getUsername() {
return username;
}
}
とここでの主なさ:
public static void main(String[] args) {
File file = new File("E:\\guaz\\eclipse_javafx\\workspace\\dkflozaTesting\\src\\dkflozaTesting\\danial.txt");
ArrayList<Residence> building = new ArrayList<Residence>();
String posision = "";
String username = "";
String pass = "";
String accNo = "";
String type = "";
String no = "";
try {
Scanner scan = new Scanner(file);
while(scan.hasNext()) {
posision = scan.next();
username = scan.next();
pass = scan.next();
accNo = scan.next();
type = scan.next();
no = scan.next();
System.out.println(posision + " " + username + " " + pass + " " + type + " " + no);
if (posision.compareToIgnoreCase("m") == 0) {
System.out.println("in if : " + posision + " " + username + " " + pass + " " + type + " " + no);
Manager mng = new Manager(posision, username, pass, accNo, type, no);
System.out.println("username : " + mng.getUsername());
building.add(mng);
}
}
System.out.print("\n \n");
//System.out.print(list.size());
//System.out.print(list.get(0).getUsername());
System.out.print("\n \n");
} catch(Exception e) {
System.out.println(e.getLocalizedMessage());
}
}
そしてメインの出力を次のように
t dkfloza pass pre 1
in if : t dkfloza pass pre 1
username : null
m danial pass1 post 2
アパートのサイズが1に変更されたが、すべての属性の値がnullであると述べることがあります。
'hasNextLine()'の代わりに 'hasNext()'を使い、その行に基づいて読み込みたいのですか? – Makoto
あなたは 'manager'にすべてのフィールドの2つのバージョンを持っています。 'residence'クラスでは1セット、' manager'クラスでは1セットです。 'manager'で宣言されたフィールドは決して初期化されないので、デフォルトは' null'です。私が何を意味するか見るには、 'return username;を' return super.username;に変更してください。 – 4castle
本当に、あなたのコードは正当な理由で**混乱しています**。あなたはJavaの命名規則に違反しています(クラス名は大文字で始まります)。あなたの変数の名前は本当に悪いです:p、u、n、pas ...どういう意味ですか?あなたに教えてください:彼らは何も意味しません。その背後にあるものが何であるかを言う名前を使用してください!そして、あなたのPersonクラスにデフォルトのコンストラクタを持つことには意味がありません。 – GhostCat