如何在Java中动态创建类的对象?

如何在Java中动态创建类的对象?,java,object,dynamic,Java,Object,Dynamic,目前我有一个可以静态创建类对象的项目: Song song1 = new Song(); song1.setTitle("Paint it Black"); song1.setRating(4); song1.setPrice(0.99); Song song2 = new Song("Hey Jude",4.99); song2.setRating(10); 这很好,但我想这样做,这样我就可以创建对象,而不必将每个对象硬编码到我的程序中,因为正如您所想象的那样,它可能会变得很长。有什么办法可

目前我有一个可以静态创建类对象的项目:

Song song1 = new Song();
song1.setTitle("Paint it Black");
song1.setRating(4);
song1.setPrice(0.99);
Song song2 = new Song("Hey Jude",4.99);
song2.setRating(10);
这很好,但我想这样做,这样我就可以创建对象,而不必将每个对象硬编码到我的程序中,因为正如您所想象的那样,它可能会变得很长。有什么办法可以做到这一点吗

本质上,而不是

Song song1 = new Song();
Song song2 = new Song();
Song song3 = new Song();
Song song4 = new Song();
Song song5 = new Song();
...
Song songN = new Song();

有一个算法可以根据用户输入为我创建对象(song1、song2、song3、songN)

假设你从某个文本框中获取信息。 那么您的代码将如下所示:

// create only once
List<Song> songs = new ArrayList<>();
//at add song button click
Song song = new Song();
song.setTitle(titleTextBox.getText());
song.setRating(ratingTextBox.getText());
song.setPrice(priceTextBox.getText());
songs.add(song);
// add the toString() method to the Song class
// print the list to see the elements of the list
System.out.println(songs);
//只创建一次
列表歌曲=新建ArrayList();
//单击“添加歌曲”按钮
歌曲=新歌();
setTitle(titleTextBox.getText());
song.setRating(ratingTextBox.getText());
setPrice(priceTextBox.getText());
歌曲。添加(歌曲);
//将toString()方法添加到Song类
//打印列表以查看列表中的元素
System.out.println(歌曲);

假设您从某个文本框中获取信息。 那么您的代码将如下所示:

// create only once
List<Song> songs = new ArrayList<>();
//at add song button click
Song song = new Song();
song.setTitle(titleTextBox.getText());
song.setRating(ratingTextBox.getText());
song.setPrice(priceTextBox.getText());
songs.add(song);
// add the toString() method to the Song class
// print the list to see the elements of the list
System.out.println(songs);
//只创建一次
列表歌曲=新建ArrayList();
//单击“添加歌曲”按钮
歌曲=新歌();
setTitle(titleTextBox.getText());
song.setRating(ratingTextBox.getText());
setPrice(priceTextBox.getText());
歌曲。添加(歌曲);
//将toString()方法添加到Song类
//打印列表以查看列表中的元素
System.out.println(歌曲);

尝试使用简单数组和for循环来创建所选内容的大小

Song song[(number of songs)];
for(x=0;x<=(number of songs);x++)
{
    song[x] = new Song();
}

尝试使用一个简单的数组结合for循环来创建所选内容的大小

Song song[(number of songs)];
for(x=0;x<=(number of songs);x++)
{
    song[x] = new Song();
}

首先,您可能希望在Song类中有一个备用构造函数

private String name;
private int rating;
private double price;

public Song( String name, int rating, double price )
{
    setName(name);
    setRating(rating);
    setPrice(price);
}

// setters/getters
好像你想要这样的东西

List<String[]> userInput = new ArrayList<>();
// Fill list with user input
List<Song> songList = new ArrayList<>();

for( String[] tokens : userInput )
{
    String name = tokens[0];
    int rating = Integer.parseInt(tokens[1]);
    double price = Double.parseDouble(tokens[2]);

    songList.add( new Song(name, rating, price) );
}

// Do something with songList
  • 使用列表存储用户输入–查看文档以了解
  • 使用循环实例化歌曲对象——同时将它们存储在列表中
  • 使用列表
  • 你的循环可能看起来有点像这样

    List<String[]> userInput = new ArrayList<>();
    // Fill list with user input
    List<Song> songList = new ArrayList<>();
    
    for( String[] tokens : userInput )
    {
        String name = tokens[0];
        int rating = Integer.parseInt(tokens[1]);
        double price = Double.parseDouble(tokens[2]);
    
        songList.add( new Song(name, rating, price) );
    }
    
    // Do something with songList
    
    List userInput=new ArrayList();
    //使用用户输入填写列表
    List songList=new ArrayList();
    for(字符串[]标记:userInput)
    {
    字符串名称=令牌[0];
    int rating=Integer.parseInt(标记[1]);
    double price=double.parseDouble(令牌[2]);
    歌曲列表。添加(新歌(名称、评级、价格));
    }
    //用歌曲列表做些什么
    
    首先,您可能希望在Song类中有一个备用构造函数

    private String name;
    private int rating;
    private double price;
    
    public Song( String name, int rating, double price )
    {
        setName(name);
        setRating(rating);
        setPrice(price);
    }
    
    // setters/getters
    
    好像你想要这样的东西

    List<String[]> userInput = new ArrayList<>();
    // Fill list with user input
    List<Song> songList = new ArrayList<>();
    
    for( String[] tokens : userInput )
    {
        String name = tokens[0];
        int rating = Integer.parseInt(tokens[1]);
        double price = Double.parseDouble(tokens[2]);
    
        songList.add( new Song(name, rating, price) );
    }
    
    // Do something with songList
    
  • 使用列表存储用户输入–查看文档以了解
  • 使用循环实例化歌曲对象——同时将它们存储在列表中
  • 使用列表
  • 你的循环可能看起来有点像这样

    List<String[]> userInput = new ArrayList<>();
    // Fill list with user input
    List<Song> songList = new ArrayList<>();
    
    for( String[] tokens : userInput )
    {
        String name = tokens[0];
        int rating = Integer.parseInt(tokens[1]);
        double price = Double.parseDouble(tokens[2]);
    
        songList.add( new Song(name, rating, price) );
    }
    
    // Do something with songList
    
    List userInput=new ArrayList();
    //使用用户输入填写列表
    List songList=new ArrayList();
    for(字符串[]标记:userInput)
    {
    字符串名称=令牌[0];
    int rating=Integer.parseInt(标记[1]);
    double price=double.parseDouble(令牌[2]);
    歌曲列表。添加(新歌(名称、评级、价格));
    }
    //用歌曲列表做些什么
    
    那么您希望从哪里获取数据?听起来你可能想要一个
    列表
    ,但是你需要在问题中更加清楚地说明你想要实现什么。你创建的对象与你在这里所做的类似,但是关于如何创建的细节在很大程度上取决于你程序的其余部分——它是如何与用户或其他代码交互的?什么背景?这里的动态是什么意思?老实说,现在你的问题看起来像是在谈论数组?你研究过了吗?你需要以某种方式决定你的
    歌曲
    将包含哪些价值,比如标题、艺术家等等。所以你需要一些数据来源。您可以要求用户在每次运行代码时填写这些信息,也可以从某个文件中读取这些信息。那么您希望从何处获取数据?听起来你可能想要一个
    列表
    ,但是你需要在问题中更加清楚地说明你想要实现什么。你创建的对象与你在这里所做的类似,但是关于如何创建的细节在很大程度上取决于你程序的其余部分——它是如何与用户或其他代码交互的?什么背景?这里的动态是什么意思?老实说,现在你的问题看起来像是在谈论数组?你研究过了吗?你需要以某种方式决定你的
    歌曲
    将包含哪些价值,比如标题、艺术家等等。所以你需要一些数据来源。您可以要求用户在每次运行代码时填写这些信息,也可以从某个文件中读取这些信息。