根据输入在Java中动态创建对象类

时间:2018-11-19 01:56:24

标签: java class object

我想根据我的输入创建一个对象类。 例如,有一个猫课。属性是猫的品种。 通常情况下,就像...

private String americanShorthair;
private String ragDoll;
private String persian;
//getters and setters

现在,我希望它基于输入是动态的,并且不是一成不变的。我想根据参数设置不同的品种。如果需要scottishFold,可以将其添加到参数中。我可以用Java做到这一点吗?谢谢

编辑:使其更加清晰 我有这个集合[americanShorthair,ragDoll,波斯语]

我希望定义一个对象的类具有这些属性,所以它看起来像这样:

public class Cat(){
private String americanShorthair;
private String ragDoll;
private String persian;
//getters and setters
}

该集合基于输入,因此,如果它是[名称,年龄,性别],则对象应该相应地更改,并且看起来应该像这样...

public class Cat(){
private String name;
private String age;
private String sex;
//getters and setters
}

1 个答案:

答案 0 :(得分:1)

为要跟踪的每种信息定义一个带有成员字段的类。

package com.basilbourque.example;

import java.util.ArrayList;
import java.util.List;

public class CatBreed {
    public String breed;

    // Constructor

    public CatBreed ( String breed ) {
        this.breed = breed;
    }

    @Override
    public String toString ( ) {
        return "CatBreed{ " +
                "breed='" + breed + '\'' +
                " }";
    }

}

创建一个集合来保存该类的某些实例(对象)。

    public static void main ( String[] args ) {
        List < CatBreed > breeds = new ArrayList <>( 3 );
        breeds.add( new CatBreed( "Persian" ) );
        breeds.add( new CatBreed( "Maine Coon" ) );
        breeds.add( new CatBreed( "Russian Blue" ) );

        System.out.println( breeds );
    }
  

[CatBreed {品种=“波斯”},CatBreed {品种=“缅因浣熊”},CatBreed {品种=“俄罗斯蓝”}]

如果要在特定的单个猫上代表该品种,请以类似的方式定义一个Cat类。

package com.basilbourque.example;

import java.time.Year;
import java.util.ArrayList;
import java.util.List;

public class Cat {
    String breed;
    String name;
    Year yearOfBirth;

    public Cat ( String breed , String name , Year yearOfBirth ) {
        this.breed = breed;
        this.name = name;
        this.yearOfBirth = yearOfBirth;
    }

    @Override
    public String toString ( ) {
        return "Cat{ " +
                "breed='" + breed + '\'' +
                " | name='" + name + '\'' +
                " | yearOfBirth=" + yearOfBirth +
                " }";
    }

    public static void main ( String[] args ) {
        List < Cat > cats = new ArrayList <>( 3 );
        cats.add( new Cat( "Persian" , "Fluffy" , Year.of( 2011 ) ) );
        cats.add( new Cat( "Maine Coon" , "Spot" , Year.of( 2012 ) ) );
        cats.add( new Cat( "Russian Blue" , "Big Boy" , Year.of( 2013 ) ) );

        System.out.println( cats );
    }
}
  

[猫{品种=“波斯语” | name ='蓬松'| yearOfBirth = 2011},Cat {品种=“缅因浣熊” | name ='Spot'| yearOfBirth = 2012},Cat {品种=“俄罗斯蓝” |名称=“大男孩” | yearOfBirth = 2013}]

如果在编译时已知所有品种,请使用枚举。 Java中的枚举功能比其他平台中的实用,灵活和强大。使用枚举可提供type-safety,确保有效值,并使您的代码更具自记录性。

package com.basilbourque.example;

import java.time.Year;
import java.util.ArrayList;
import java.util.List;

public class Cat {
    enum Breed { PERSIAN, MAINE_COON, RUSSIAN_BLUE }

    Breed breed;
    String name;
    Year yearOfBirth;

    public Cat ( Breed breed , String name , Year yearOfBirth ) {
        this.breed = breed;
        this.name = name;
        this.yearOfBirth = yearOfBirth;
    }

    @Override
    public String toString ( ) {
        return "Cat{ " +
                "breed='" + breed + '\'' +
                " | name='" + name + '\'' +
                " | yearOfBirth=" + yearOfBirth +
                " }";
    }

    public static void main ( String[] args ) {
        List < Cat > cats = new ArrayList <>( 3 );
        cats.add( new Cat( Breed.PERSIAN , "Fluffy" , Year.of( 2011 ) ) );
        cats.add( new Cat( Breed.MAINE_COON , "Spot" , Year.of( 2012 ) ) );
        cats.add( new Cat( Breed.RUSSIAN_BLUE , "Big Boy" , Year.of( 2013 ) ) );

        System.out.println( cats );
    }
}
  

[猫{品种='波斯人'| name ='蓬松'| yearOfBirth = 2011},Cat {品种='MAINE_COON'| name ='Spot'| yearOfBirth = 2012},Cat {品种='RUSSIAN_BLUE'|名称=“大男孩” | yearOfBirth = 2013}]