【问题标题】:How to return toString method from methods stored in an ArrayList如何从存储在 ArrayList 中的方法返回 toString 方法
【发布时间】:2023-03-22 06:17:01
【问题描述】:

我是 Java 和面向对象编程的新手,但渴望在 Java 方面做得更好并参与到 stackoverflow 社区中。

我怀疑这个问题有一个简单的解决方案,但我无法在任何地方找到答案。 我有一堆书籍细节存储在一个数组列表中,每个都有不同的细节级别(即工程书籍的额外字符串“主题”,而标准书籍只有 3 个变量)。 我想知道是否可以从存储在 ArrayList 中的值调用每个书籍类的 toString 方法? 或者,是否可以将每个不同书籍类方法的 toString 输出存储在 ArrayList 中?

这样,如果有工程教科书,它将显示数组列表中的所有详细信息,而编程教科书将显示较少的细节(如果字符串字段为空,则不会留下“null”。

即数组列表将打印:

教科书 1:Java101/Migoreng 博士/1331/Java 教科书2:Python201/Karl博士/112/Python 教科书 3:Fluids101/Dr Brisbane/122/GIS/Modelling(那里有额外的字段)

等等……

如果任何人都可以提供可能有帮助的关键字,那将不胜感激。

谢谢

代码如下:

构建 ArrayList 的 TestTextBooks 类:


import java.util.ArrayList;

public class TestTextbooks {  

        public static void main(String[] args) {
            Textbook java101 = new ProgrammingTextbook("Java101","Dr Migoreng",1331,"Java");
            Textbook python201 = new ProgrammingTextbook("Python201","Dr Karl",112,"Python");
            Textbook fluidMechanics = new EngineeringTextbook("Fluids101","Dr Brisbane",122,"GIS","Fluid Mechanics");
            Textbook modelling101 = new EngineeringTextbook("Modelling101","Dr Suzuki",322,"WaterGems","Water Modelling");

      ArrayList books = new ArrayList();
      books.add(java101); 
      books.add(python201); 
      books.add(fluidMechanics);
      books.add(modelling101);

      System.out.println("" + books.toString());
            }    
    }

编程教科书类(如果可用,添加字段“语言”)

public class ProgrammingTextbook extends Textbook {
    private String language;
    private String title;
    private String author;
    private int pages;


    public ProgrammingTextbook (){
    }

        //overloaded constructor
    public ProgrammingTextbook (String title, String author,int pages,String language){
        this.title = title;
        this.author = author;
        this.pages = pages;
        this.language=language;
    }
    //set method for overloaded constructor
    public void setProgrammingTextBook (String title, String author,int pages,String language){
        setLanguage(language);
    }
     //individual set methods
    public void setLanguage(String language){
        this.language = language;
    }
    //individual get methods
    public String getLanguage(){
        return language;
    }  
    public String toString(String title, String author,int pages,String language){
        return title + "/" + author + "/" + pages + "/" + language;
    }

}

工程教科书类(添加领域语言和主题)

public class EngineeringTextbook extends Textbook {
    private String language;
    private String subject;
        //default constructor (probs shouldn't actually have values)
        public EngineeringTextbook (){
    }
    //overloaded constructor
    public EngineeringTextbook (String title, String author,int pages,String language,String subject){
        this.title = title;
        this.author = author;
        this.pages = pages;
        this.language=language;
        this.subject=subject;
    }
    //set method for overloaded constructor
    public void setEngineeringTextBook (String title, String author,int pages){
        setLanguage(language);
        setSubject(subject);
    }
        //individual set methods
    public void setLanguage(String language){
        this.language = language;
    }
    public void setSubject(String subject){
        this.subject = subject;
    }

    //inbdividual get methods
    public String getLanguage(){
        return language;
    }
    public String getSubject(){
        return subject;
    }

    //toString method
    public String toString(String title, String author,int pages,String language,String subject){
        return title + "/" + author + "/" + pages + "/" + language + "/" + subject;
    }
}

抽象教科书类(定义作者、标题和页数)(由所有书籍共享)

public abstract class Textbook {

    protected String title;
    protected String author;
    protected int pages;

    //default constructor (Don't really need to add null for all values but put in to show it is a default constructor
    public Textbook (){
        this.title = null;
        this.author = null;
        this.pages = 0;
    }
    //overloaded constructor
    public Textbook (String title, String author,int pages){
        this.title = title;
        this.author = author;
        this.pages = pages;
    }
    //individual set methods
    public void setTitle(String title){
        this.title = title;
    }
    public void setAuthor(String author){
        this.author = author;
    }
    public void setPages(int pages){
        this.pages = pages;
    }
    //individual get methods
    public String getTitle(){
        return title;
    }
    public String getAuthor(){
        return author;
    }
    public int getPages(){
        return pages;
    }
    //abstract toString method
    public String toString(String title, String author,int pages){
       return title + "/" + author + "/" + pages;
    }   
}

【问题讨论】:

    标签: java arraylist tostring


    【解决方案1】:

    Object.toString() 接受任何参数。当您未能正确覆盖方法时,使用@Override 注解捕获它。

    @Override
    public String toString() {
        return title + "/" + author + "/" + pages + "/" + language;
    }
    

    @Override
    public String toString() {
       return title + "/" + author + "/" + pages;
    }   
    

    等等

    【讨论】:

    • 哇!那太容易了!非常感谢!以后我会注意向我的 toString 方法添加参数。谢谢大家!
    猜你喜欢
    • 2021-06-10
    • 2014-05-04
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2014-04-23
    • 2013-08-10
    • 2016-06-04
    • 2017-06-13
    相关资源
    最近更新 更多