2016-02-17 28 views
-1

我現在有這個問題一段時間了,並且設法避免它到現在。基本上我有一個課程,用一個返回這個信息的getter來存儲高爾夫球場每個洞的信息。在另一個類中,當用戶從洞1移動到洞2(當前存儲爲整數)時,我希望訪問洞2的getter方法,但不知道如何完成。Java - 使用動態名稱變體訪問類方法

代碼:

課程信息類:

//Hole information 
private static String[] hole1 = {"name", "Distance", "Par"}; 
private static String[] hole2 = {"name", "Distance", "Par"}; 

public static String[] getHole1(){ 
    return hole1; 
} 

public static String[] getHole2(){ 
    return hole2; 
} 

主類:

String[] holeInfo; 
int currentHole = 1; 

//How I call hole1 info just now 
//I just access the elements of the array as needed then 
holeCoOrds = course.getHole1(); 

//User starts next hole (this will be the case for all 18 holes) 
currentHole++ 

//Call next hole information getter method here 
//Something along the lines of; 
holeCoOrds = course.getHole(currentHole)(); 

任何幫助將不勝感激,我一直在貨架我的大腦有一段時間了,但沒有成功。

在此先感謝。

回答

1

你可以用反射來做到這一點。然而,更好的方法是重新設計你的課堂,這樣就沒有必要。將所有hole陣列放入另一個陣列或列表中,然後製作一個getHole(int)方法,該方法從中返回一個項目。

所以一個簡單的(不健全檢查)的版本是這樣的:

private static String[] holes = {{"name", "Distance", "Par"}, 
           {"name", "Distance", "Par"}}; 

public static String[] getHole(int hole){ 
    return holes[hole]; 
} 

這可以很容易地在將來添加額外的孔,並讓你的代碼是更加靈活,讓你不編譯時不需要知道你想要哪個洞。

+0

我不敢相信我沒有想到這一點,在等待期過後,將設定爲接受的答案。再次感謝 :) – Seatter

2

你不擁有最好的辦法:

//Hole information 
private static String[] hole1 = {"name", "Distance", "Par"}; 
private static String[] hole2 = {"name", "Distance", "Par"}; 

可以存儲在一個List<String[]>這樣:

private static List<String[]> holes = new ArrayList<String[]>(); 

private static String[] hole1 = {"name", "Distance", "Par"}; 
holes.add(hole1); 
private static String[] hole2 = {"name", "Distance", "Par"}; 
holes.add(hole2); 

然後,只用一個方法得到孔值:

public static String[] getHole(int holeNumber){ 
    return holes.get(holeNumber); 
} 

如果你想要有孔的更好的控制,使用Map添加識別每一個孔一個關鍵

private static Map<Integer, String[]> holes = new HashMap<Integer, String[]>(); 

private static String[] hole1 = {"name", "Distance", "Par"}; 
holes.put(1, hole1); 
private static String[] hole2 = {"name", "Distance", "Par"}; 
holes.put(2, hole2); 

然後,得到孔的值,只有一個方法:

public static String[] getHole(int holeNumber){ 
    return holes.get(holeNumber); 
} 
0

你爲什麼不創建一個類Hole實體象下面這樣:

public class Hole { 
private int holeNo; 
private String name; 
private String dist; 
private String par; 

//getters and setters for above properties 
} 

所以,當你調用從主類的代碼,很容易通過2個或更多的一組孔(穿越)。

您甚至可以將所有Hole對象的實例保留在Map中,以便檢索很容易。