首页 > 解决方案 > 基于输入在java中动态创建对象类

问题描述

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

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

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

编辑:为了更清楚,我有这个系列 [americanShorthair, ragDoll, persian]

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

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
}

标签: javaclassobject

解决方案


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

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{breed='波斯'},CatBreed{breed='缅因浣熊'},CatBreed{breed='俄罗斯蓝'}]

如果您要在特定的个别猫上代表品种,请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 );
    }
}

[猫{品种='波斯'| 名称='蓬松' | yearOfBirth=2011 }, Cat{ 品种='缅因浣熊' | 名称='现货' | yearOfBirth=2012 }, Cat{ 品种='俄罗斯蓝' | 名称='大男孩' | 出生年份=2013 }]

如果所有品种在编译时都是已知的,请使用枚举。Java 中的枚举工具比其他平台更有用、更灵活、更强大。使用枚举提供类型安全性,确保有效值,并使您的代码更具自我记录性。

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 );
    }
}

[猫{品种='波斯'| 名称='蓬松' | yearOfBirth=2011 }, 猫{ 品种='MAINE_COON' | 名称='现货' | yearOfBirth=2012 }, 猫{ 品种='RUSSIAN_BLUE' | 名称='大男孩' | 出生年份=2013 }]


推荐阅读