2

String[]単語のリストである一連の配列があります。何かのようなもの:

String[] ListOne = new String[100];
String[] ListTwo = new String[100];
/*And so on with other lists */

ListOne[0] = "word00";
ListOne[1] = "word01";
/*And so on till*/
ListLast[99] = "word 99 from last list";

ここで、数値を指定すると、対応する要素 (単語) を返す各リストの関数が必要です。

public String GetFromListOne(int key) { return ListOne[key];} 

このゲッター関数のそれぞれを手動で記述しないようにする方法はありますか?

たとえば PHP では、マジック メソッドを使用する__call
、リスト名を引数として渡して動的に参照します。

Javaで似たようなことをする方法はありますか?
または、同じ結果を達成するための代替戦略はありますか?

4

6 に答える 6

4

継承を検討する必要があります。

基本的に行う必要があるのは、インターフェイスを定義する (または List クラスを拡張する) ことです。

 public interface ListTest{
//**Gets keys from lists*//
GetFromListOne(int key);
}

それから

public class Listone implements ListTest{

/** methods **//
GetFromListOne(int key);
/** methods **//
}

楽しく伸ばしましょう

http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

于 2012-09-07T17:25:46.803 に答える
1

2 次元配列または配列のリストを使用して、関数に 2 つのパラメーターを持たせることができます。1 つは必要な配列用で、もう 1 つは配列内の要素用です。

2 次元配列:

String[][] ListN = new String[100,100];

String getFromList(int n, int key) {
    return ListN[n][key];
}

または配列のリスト:

List<String[]> listOfArrays = new ArrayList<String[]>();
listOfArrays.add(new String[100]);
listOfArrays.add(new String[100]);


String getFromList(int n, int key) {
    return listOfArrays.get(n)[key];
}
于 2012-09-07T17:27:50.557 に答える
0

このコードを試してください

List<String[]> lists = new ArrayList<String[]>();

public String getFromLists(int key) {
  List<String> res = new ArrayList<String>();
  for (String[] s: lists){
      res.add(s[key]);
  }    
  return res.get(key);
}

以上

public String getFromLists(int key) {
  return lists.get(key)[key];
}
于 2012-09-07T17:41:51.213 に答える
0
   String[] ListFour=new String[100];
   String[] ListTwentyThree=new String[100];
   String[] ListNine=new String[100];
   String[] ListOne=new String[100];

   Hashtable<Integer,String[]> yourlist=new Hashtable<Integer,String[]>();      
   yourlist.put(4, ListFour);
   yourlist.put(23, ListTwentyThree);
   yourlist.put(9, ListNine);
   yourlist.put(1, ListOne);
   System.out.println(yourlist.get(4)[5]);//fifth string in ListFour
   System.out.println(yourlist.get(23)[51]);//fifty first string in List23
    System.out.println(yourlist.get(9)[1]);//first stringin ListNine

別のバージョン:

   Hashtable<Object,String[]> yourlist=new Hashtable<Object,String[]>();        
   yourlist.put("two multiplied by two", ListFour);
   yourlist.put(23, ListTwentyThree);
   yourlist.put(0.03, ListNine);
   yourlist.put(true, ListOne);
   System.out.println(yourlist.get("two multiplied by two")[5]);//fifth string in ListFour
   System.out.println(yourlist.get(23)[51]);//fifty first string in List23
    System.out.println(yourlist.get(true)[1]);//first stringin ListNine
于 2012-09-07T17:38:37.803 に答える
0

キーとリスト番号を入力として受け取る関数がありますか?

public String GetFromListOne(int list, int key) {
    switch(list):
       case 1:
           return ListOne[key];
           break;
       case 2:
           return ListTwo[key];
           break;
       ...
}

または、配列の配列を作成することもできます。

String[][] ListOfLists = new String[10];
ListOfLists[0] = new String[100];
...

public String GetFromList(int list, int key) {
    return ListOfLists[list][key];
}

そうでなければ、__call のようにオーバーライドする関数がわかりません

于 2012-09-07T17:23:21.873 に答える
0

PHPメソッドに基づいて__call、リストとインデックスを受け取るメソッドを実装してこれを実現でき、ジェネリックを使用してこのようなものを取得できます。

public class Utility {
    public <T> T getElementFromArray(T[] array, int index) {
        if (index >= array.length || index < 0) return null;
        return array[index];
    }
}

このメソッドの落とし穴は、 のようなプリミティブ配列ホルダーには使用できないことint[]です。これらのケースの解決策は、プリミティブ型のラッパー クラスを使用することです。

public static void main(String[] args) {
    Utility u = new Utility();
    String[] ss = new String[2];
    ss[0] = "Hello";
    ss[1] = "world!";
    System.out.println(u.getElementFromArray(ss, 0));
    System.out.println(u.getElementFromArray(ss, 1));
    int[] ii = new int[2];
    ii[0] = 5;
    System.out.println(u.getElementFromArray(ii, 0)); //compile error
    //Solution: use wrapper classes
    Integer[] ii2 = new Integer[2];
    ii2[0] = 5;
    System.out.println(u.getElementFromArray(ii2, 0));
}
于 2012-09-07T17:35:43.350 に答える