老实说,我不确定我是用正确的名字来称呼这些东西,所以道歉。
我在一个类文件中得到了这个:
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;
显然这不起作用,但我希望这个想法足够明确 - 通过使用字符串获取其名称的一部分来获取类对象。谢谢!
答案 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);