在Java中通过字符串获取类成员

时间:2017-08-19 15:17:53

标签: java

老实说,我不确定我是用正确的名字来称呼这些东西,所以道歉。

我在一个类文件中得到了这个:

class eSpecies {
    protected String name;
    protected String file;
    protected int hp;
    protected int atk;
    protected int exp;
    protected int type;
    public int kill;
    protected String flavour;


    eSpecies(String name, String file, int hp,int atk, int exp, int type, int kill, String flavour){
        this.name=name;
        this.file=file;
        this.hp=hp;
        this.atk=atk;
        this.exp=exp;
        this.type=type;
        this.kill=kill;
        this.flavour=flavour;

    }
}

public class enemyDB{

    static eSpecies lsp     = new eSpecies("Lesser Shelled Pincher", "lsp", 500, 30, 50, 1, 0, "this is a small bug");
    static eSpecies gsp     = new eSpecies("Greater Shelled Pincher", "gsp", 50000, 50, 500, 1, 0, "this is a small bug");

}

并且已经在另一个中引用它:

eSpecies e = enemyDB.lsp;

我想知道它是否可以基本上这样做:

String type = "lsp";
eSpecies e = enemyDB.type;

显然这不起作用,但我希望这个想法足够明确 - 通过使用字符串获取其名称的一部分来获取类对象。谢谢!

2 个答案:

答案 0 :(得分:0)

它被称为"反射"。来自另一篇文章:

$(document).on("click", ".fetchCCropID", function () {
 var myCCropId = $(this).data('id');
 $(".modal-body #crop_cultivated_id").val( myCCropId );
 $('#crop_cultivated_id').modal('show');

但如果可能,你应该避免它。它并不是一个很好的实践,因为它破坏了像Java这样强类型语言的整个想法。

答案 1 :(得分:0)

反思可以是实现这一目标的方法。根据文件:

  

如果底层字段是静态字段,则忽略obj参数;它可能是null。

此外,字段静态应该是可见的。比如公共领域。例如。

  

公众静态eSpecies lsp = new eSpecies(" Lesser Shelled Pincher",...

您的代码需要直接通过名称获取而不是遍历字段。例如:

String type = "lsp";
eSpecies ep1 = (eSpecies) enemyDB.class.getField(type).get(null);