0

ファイル名とファイルの場所として入力を取得するクラスを使用しています。定義済みのファイル名があるので、定義済みのファイル名を受け取ったファイル名と照合し、それに応じて値を保存します。以下のコードを見てください

//Set of storage maps and tables 
public class storage
{
//Storage set
public static Set<Integer> tiger = new HashSet<Integer>();

//Storage set
public static Set<Integer> lion = new HashSet<Integer>();

//This is the table used for storing the browser customer count  
public static Table<String,String,Integer> elephant = HashBasedTable.create(); 

//Storage map 
public static Map<String, String> monkey = new HashMap<String, String>();


public static void storeDataDirector(String fileLocation,String fileName) throws     Exception 
{
    if (fileName = monkey) 
                **update the "monkey map"**

}

これは私の問題です。また、使用するマップとテーブルがたくさんあるため、複数のif条件を使用して同じものをチェックして更新することはできません。

私が知りたいのは以下です

先ほど言ったように、私がプログラムに送っているファイル名「文字列ファイル名」は「地図猿」と同じ名前ですが、前者は文字列、後者は地図です。両方とも同じ名前を持っているため、文字列変数をマップ インスタンスへの参照として使用できるかどうかを知りたいです。これにより、プログラムで使用しているif条件が大幅に回避されるため、これに対する解決策を考えたいと思います...型のケース化ortに関連するもの

4

3 に答える 3

2

Mapキーが aStringで値が a である別のものが必要ですMap。何かのようなものMap<String,Map> allMaps = new HashMap<String,Map>()

このマップを作成したら、すべてのファイル名と対応するマップを入力しますmonkey

allMaps .put("monkey", monkey)

文字列ファイル名mapが asetではなく a に対応する場合は、より一般的なものを宣言する必要がありますMap<String,Object> allMaps = new HashMap<String,Object>()。もちろん、これは、意味のあることを行う前に、値を特定の型にキャストする必要があることを意味します。

次に、このマップを使用するには、ファイル名引数を使用します

Map monkeyAgain = allMaps.get(filename)

于 2012-07-28T19:29:27.437 に答える
1

リフレクションを使用できます:

Storage.class.getField(fileName).get(null)

返されたオブジェクトをキャストする必要があります。私はこれが正しいアプローチだとは思いません。

于 2012-07-28T19:29:49.927 に答える
0

アイデアは、マップでそれらを関連付け、たとえばファイル名をキーとして使用することです

Map<String, Map<String, String>>
//  file    store structure

一般的な解決策が必要な場合は、ストア構造の抽象化を実装し、次のようなインターフェイスを実装することでこれを解決できます。

// T is the store type and U is the original type (String from file for instance...)
public interface StoreUnit<T, U> {

    void update(U record);

    List<T> list();

}

そのため、各ケース (セット、マップ、テーブルなど) の実装があり、ファイル名をキーとしてマップに関連付けます。

monkeyFileName => MapStoreUnit<Entry<String,String>,String>
tigerFileName => SetStoreUnit<Integer, String>
elephantFileName => TableStoreUnit<Entry<Entry<String,String>,String>,String> // not sure if for Table there is something better than Entry ;)

ストアを更新したい場合は、ファイル名をキーとして使用してマップ上で実行し、レコードで実装されたメソッドgetを呼び出します(これは、 complexである可能性があります) など。そこから何かを読み取る必要がある場合は、メソッドを使用できます。updateStringObjectlist

于 2012-07-28T19:23:38.283 に答える