亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讓 JavaBean 寫入 XML 時遇到問題

讓 JavaBean 寫入 XML 時遇到問題

倚天杖 2024-01-28 16:29:41
我的代碼將名稱寫入 XML 文檔,但不寫入任何測試分數。即使我改了名字,考試成績也總是輸出0。我將非常感謝任何幫助弄清楚為什么會出現這種情況的幫助。我已附加帶有 main 方法的類和帶有構造函數的類。感謝您的幫助!import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.util.Scanner;public class Studentp194Runner {public static void main(String[] args){               Studentp194 s1 = new Studentp194();    Scanner reader = new Scanner(System.in);    System.out.print("Enter student name: ");    s1.setName(reader.nextLine());    System.out.print("Enter the student's first score: ");    s1.setScore(1, reader.nextInt());    System.out.print("Enter the student's second score: ");    s1.setScore(2, reader.nextInt());    System.out.print("Enter the student's third score: ");    s1.setScore(3, reader.nextInt());    try    {        FileOutputStream fos = new FileOutputStream(new File("./student.xml"));        XMLEncoder encoder = new XMLEncoder(fos);        encoder.writeObject(s1);        encoder.close();        fos.close();    }    catch(IOException ex)    {        ex.printStackTrace();    }    try    {        FileInputStream fis = new FileInputStream(new File("./student.xml"));        XMLDecoder decoder = new XMLDecoder(fis);        Studentp194 p2 = (Studentp194)decoder.readObject();        decoder.close();        fis.close();        System.out.println("Student 1 name: " + p2.getName());        System.out.println("Test 1: " + p2.getScore(1));        System.out.println("Test 2: " + p2.getScore(2));        System.out.println("Test 3: " + p2.getScore(3));    }    catch(IOException ex)    {        ex.printStackTrace();    }   }}
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

最簡短的答案在技術上是正確的,但對于不熟悉 Java bean 的人來說毫無用處:Studentp194沒有score屬性。因此,不存在的score屬性不會被 編碼為 XML?XMLEncoder


對于任何具有名為 、foo類型為 的Java Beans 屬性的任意類Foo,它必須有一個public Foo getFoo()方法和一個public void setFoo(Foo foo)方法。正如你所看到的,你的Studentp194類沒有public int getScore()方法,也沒有方法public void setScore(int score)

(當然,Java Beans 規范實際上并不強制要求這些是方法所需的名稱。您可以通過多種方式自定義它們,包括使用 classes?BeanInfo,但這遠遠超出了本問題的范圍。)

回到你的問題和代碼,XMLEncoder不會對你的類設計有幫助,因為你的getScore方法需要參數,并且你的setScore方法需要多個參數。因此它們不是 Java Beans 屬性;而是 Java Beans 的屬性。因此XMLEncoder不會對它們進行編碼。

假設您出于某種原因想要繼續使用XMLEncoder.然后您必須重構您的類以符合 Java Beans 規范。我將把它作為練習留給讀者。 :-)

我猜這是某種作業,而使用XMLEncoder是作業的要求。如果我錯了,請查看不同的文件格式來存儲和檢索您的信息。

Studentp194如果我是對的,那么您想要查看您的班級在邏輯上與分數集合或數組相關聯的事實。您可能希望實際創建一個類來表示測試分數,并將此類測試分數的集合存儲在您的Studentp194類中。更好的是,也許您的Studentp194類希望與另一個類相關,例如Transcript可以正確存儲此信息的類或類似的類。有關這種分解問題的分解方法的更多信息,請閱讀“第三范式”并從那里開始。我希望這對您有所幫助,歡迎來到 StackOverflow。


查看完整回答
反對 回復 2024-01-28
  • 1 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號