0

Java 新手,无法弄清楚我希望是什么简单的东西。

我将“部分”保存在一个数组中:

//Section.java
public static final String[] TOP = {
    "Top News",
    "http://www.mysite.com/RSS/myfeed.csp",
    "top"
};

我想做这样的事情:

Article a1 = new Article();
a1.["s_" + section[2]] = 1;  //should resolve to a1.s_top = 1;

但它不会让我,因为它不知道“部分”是什么。(我敢肯定,经验丰富的 Java 人会对这种尝试感到畏缩......但我的搜索结果是关于如何做到这一点的空白)

澄清:

我的文章 mysqlite 表有文章“部分”的字段:

s_top
s_sports
...etc

1从 XML 文件导入时,如果它属于该类别,我想将该字段设置为 a 。我可以有 switch 语句:

//whatever the Java version of this is
switch(section[2]) {
    case "top": a1.s_top = 1; break;
    case "sports": a1.s_sports = 1; break;
    //...
}

但我认为将它写成一行会容易得多:

a1["s_"+section[2]] = 1;
4

3 回答 3

2

在 Java 中,以您尝试做的方式去做您想做的事情是一件痛苦的事。

如果您不想使用 switch/case 语句,则可以使用反射来提取您尝试设置的成员属性:

Class articleClass = a1.getClass();
Field field = articleClass.getField("s_top");
field.set(a1, 1); 

它会起作用,但它可能会很慢,而且它是解决这个问题的一种非典型方法。

或者,您可以将 aMap<String>或 a存储Map<String,Boolean>在您的类中,并在called中Article有一个公共函数,并且当您迭代时,您可以将各个部分字符串(或字符串/值映射)放入每个 的映射中。因此,与其静态定义哪些部分可能存在并给每个部分一个是或否,您将允许可能部分的列表是动态的并基于您的 xml 导入。ArticleputSection(String section)ArticleArticle

于 2012-07-05T19:16:15.570 回答
1

Java 变量不是“动态的”,例如取消链接动作脚本。您不能在编译时不知道变量的情况下调用或分配变量(好吧,您可以使用反射,但它远非复杂)

所以是的,解决方案是有一个 switch case(仅适用于 java 1.7 的字符串),或者使用 hashmap 或等效的

或者,如果是关于导入 XML,也许你应该看看JAXB

于 2012-07-05T19:07:13.110 回答
0

如果您尝试从对象中获取属性,则需要确保您的对象中有“getter”和“setter”。您还必须确保Section在您的文章类中定义。

就像是:

class Article{
  String section;   

  //constructor
  public Article(){
  };

  //set section
  public void setSection(Section section){
  this.section = section;
}
  //get section
  public String getSection(){
  return this.section; 

}
于 2012-07-05T18:52:56.717 回答