【问题标题】:Can I make a reference to a field class dynamically in Java? [closed]我可以在 Java 中动态引用字段类吗? [关闭]
【发布时间】:2012-12-09 00:36:54
【问题描述】:

我有一个名为 Bird 的类,它由 3 个字符串字段组成,每个字段都是不同语言的名称,例如 Bird.lang1Bird.lang2Bird.lang3。我有一个名为 allbirds 的 Bird 实例。

现在我想用用户选择的语言制作一个字符串列表ListOfAllBirds,其中包含所有鸟类的名字,存储在lang变量中,其值为lang1、@987654329之一@,lang3。我需要这样做数百次(调用这个次数N)。

当然,我可以对所有 Bird 元素进行迭代,并将相应的字段添加到 lang 的字段中。但这意味着在3 x N x Bird.size()(即数十万!!)条件查询中测试用户选择的语言。

我可以做类似的事情

varfield = lang.toField();
for (Bird birdy : allbirds)
    ListOfAllBirds.add(birdy.varfield);

也就是说,我可以用变量引用一个字段吗?这将为我节省大量的条件查询!

谢谢!

【问题讨论】:

  • 你不能将字符串存储在字符串数组中并通过索引访问它们吗?
  • @MAV:当然。但这将如何节省我的资源?这难道不意味着在任何情况下都有许多操作吗?
  • @LuisA.Florit 如果您的语言设置是对应于正确索引的 int,它会很好用。
  • @Vulcan: 不,lang 是一个字符串。
  • 然后将其更改为与每种语言对应的int,并采用该方法。

标签: java dynamic reference field


【解决方案1】:

我使用 String 数组的意思是这样的(如果您不想按照 Vulcan 的建议将语言设置更改为 int)。

String chosenLanguage = "Language 2";
int languageIndex = -1;
switch(chosenLanguage)
{
    case "Language 1": 
        languageIndex = 0;
        break;
    case "Language 2":
        languageIndex = 1;
        break;
    case "Language 3":
        languageIndex = 2;
        break;
    default:
        languageIndex = 0;
        break;
}

for (Bird birdy : allbirds)
       ListOfAllBirds.add(birdy.names[languageIndex]);

您的班级将如下所示:

class Bird
{
    public String[] names = {"name1", "name2", "name3"};
}

而不是

class Bird
{
    public String lang1 = "name1";
    public String lang2 = "name2";
    public String lang3 = "name3";
}

这样您只需检查一次用户选择的语言(以查找索引),然后您可以遍历所有鸟类并根据索引获取正确的名称。

【讨论】:

  • 我不明白,抱歉。你的代码中有什么样的对象names?即使namesint[],我也看不出它是如何工作的……你的names 应该类似于ClassField[],它不存在。
  • @LuisA.Florit 更新了我的答案。现在更有意义了吗?
  • 嗯...我明白你的意思了。将尝试实施它,并通知回来。非常感谢!!!
  • 实际上,String[3] names 可以是Map,而不是Map
  • 是的....现在我明白你的意思了。而且我也明白我的问题有多愚蠢!你的解决方案很好。非常感谢您对这个新手的耐心等待!
猜你喜欢
  • 2015-02-04
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2018-06-28
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多