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

1XML ファイルからインポートするとき、そのフィールドがそのカテゴリにある場合は、そのフィールドを に設定したいと思います。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を格納し、called内にパブリック関数を含めることができます。繰り返しながら、さまざまなセクション文字列 (または文字列/値のマッピング) を各 のマップに配置します。したがって、どのセクションが存在するかを静的に定義し、それぞれに「はい」または「いいえ」を与える代わりに、可能なセクションのリストを動的にして、xml インポートに基づくようにします。Map<String,Boolean>ArticleArticleputSection(String section)ArticleArticle

于 2012-07-05T19:16:15.570 に答える
1

Java 変数は「動的」ではありません。たとえば、actionscript のリンクを解除します。コンパイル時にそれを知らずに変数を呼び出したり割り当てたりすることはできません (まあ、リフレクションを使えばできますが、複雑にはほど遠いです)

はい、解決策は、スイッチケース(Java 1.7の文字列でのみ可能)を使用するか、ハッシュマップまたは同等のものを使用することです

または、XML のインポートに関するものである場合は、JAXBを検討する必要があります。

于 2012-07-05T19:07:13.110 に答える