2012-11-09 32 views
0

我有這樣的代碼在我main()如何返回一個類?

public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Customer forrest = new Customer("Forrest Gump", 1, "42 New Street, New York, NY"); 
     Customer random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 
... 
} 

我如何可以繼續編寫代碼,以便它返回給定一個ID號(比如1倍中給出的回報阿甘,2箇中給出的回報率是隨機的)

+0

你節省客戶在數據庫中?否則,客戶forrest和隨機只存在於主要方法的範圍內。 –

+0

@RoddyoftheFrozenPeas嗯......現在我只是手動添加客戶(在這種情況下只有2個客戶),稍後我可能會嘗試編寫客戶輸入界面...我想要一個通用的方法,假設idk第一個客戶的實例名稱是'Forrest',我如何讓程序返回Forrest int ID爲1? – user133466

+4

你混淆了類名和變量名。在Java中,標準化做法是大寫類名但不包含變量名。 「Forrest」和「Random」不應該大寫。所以這是令人困惑的,因爲你正在返回'Customer',這似乎是一個類本身。實際上,我想你想要返回'福雷斯特'。但是按照大寫標準,這個錯誤會更好。 –

回答

0

使用靜態字段,或者如果它可能會拋出異常在您的類中寫入靜態塊。請不要從大寫字母開始變量名稱。

class MainClass{ 
    // All uppercase because it is constant 
    private static final Customer FORREST = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    private static final Customer RANDOM = new Customer("Random Name", 2, "44 New Street, New York, NY"); 

    public static void main(String[] args) { 
    // TODO Auto-generated method stub 

} 

如果你想返回類

Class returnClass(){ 
if(sth) 
    return Customer.class; 
else 
    return Random.class; 
} 
+0

你可以再次看看代碼,我已經添加了一些細節,使我的問題更清晰 – user133466

1
客戶的實例

在這種情況下,您的return聲明應該是類型的對象。

例子:

return new Customer(); 

除非CustomerRandom相關的(繼承),你可能無法寫出返回兩種類型的方法。

+0

我想得到一個普遍的方法,假設idk的第一個客戶的實例名稱是'Forrest',我如何讓程序返回Forrest'int id'爲1? – user133466

1

我不確定你在問什麼。我懷疑你要返回類的實例,創建對象。然後寫return Forrest;阿甘對象只有在方法主要適用範圍

+0

我想要一個通用的方法,假設idk第一個客戶的實例名稱是'Forrest'(我也不知道第二個客戶的實例名是'Random'),我如何讓程序返回' Forrest'給出的int ID是1 – user133466

+0

你可以再次看看代碼,我已經添加了一些細節,使我的問題更清晰 – user133466

1
static Customer GetCustomer(int id) 

此方法的返回類型並不意味着你必須返回Customer類是可見的。

這意味着它應該返回對Customer類或Customer類的一個子類的對象的引用。

所以,你的回報的說法應該是這樣的: -

return new Customer(id); 

,並根據該法,現在看來似乎應該與id返回一個已經存在的Customer對象。例如,如果您有List<Customer>,那麼您需要從該列表中找出具有給定id的對象Customer

現在,鑑於您的主要方法,您已經創建了兩個Customers - forrestrandom。您需要將這些引用保存在某個持久性存儲中,可以是List<Customer>或某些數據庫。並且要獲取指向基於某個id的對象的引用,您必須從正在使用的持久性存儲中獲取它。


在你的情況,因爲你希望獲取基於id對象,你可以保持Map<Integer, Customer>Customers存儲與他們的特定id

static Map<Integer, Customer> map = new HashMap<Integer, Customer>(); 

public static void main(String[] args) { 
    Customer forrest = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    Customer random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 

    map.put(1, forrest); 
    map.put(2, random); 
} 

,然後在getCustomer方法,剛拿到customerid作爲參數傳遞: -

public Customer getCustomer(int id) { 
    return map.get(id); 
} 

所以,你不需要任何價值上做id測試。它會自動獲取相應的Customerid

例如,: -

getCustomer(1); 

將返回forrest指向的對象的引用。

+0

你可以再看看代碼,我已經添加了一些細節我的問題更清楚 – user133466

3

當你創建你的主要目標客戶,他們只在主要的,除非你保存它們的地方存在。

例如:

public static void main(String[] args) { 
    Customer c = new Customer (...); 
    // c exists here 
} 
public static void doSomething() { 
    // c does not exist here 
} 

除非您保存新對象到數據庫或數據結構,你將不能夠做一些對他們的「查找」的。

這裏有一個例子,你可以根據自己的一個HashMap IDS保存客戶:

private HashMap<Integer, Customer> records = new HashMap<Integer, Customer>(); 

public void doSomething() { 
    Customer forrest = new Customer(1); 
    Customer random = new Customer(2); 

    // put the customers in the HashMap: 
    records.put(1, forrest); 
    records.put(2, random); 

    // to get them out: 
    records.get(1); // returns forrest 
    records.get(2); // returns random 
} 
+0

你可以再次看看代碼,我已經添加了一些細節,使我的問題更清晰 – user133466

+0

@ user133466 - 爲什麼不修改客戶類來保存BankAccount對象?例如。 '公共類客戶{私人BankAccount帳戶; ''? –

+0

我實際上在Customer類中有4個BankAccount對象。更詳細的代碼可以在這裏找到http://stackoverflow.com/questions/13316042/how-to-get-an-instance-of-a-class – user133466

0

如果GETCUSTOMER是一個實例方法,這將是:

Customer GetCustomer(int id){ 
    Customer result = null; 

    if(id == 1){ 
     result = Forrest ; 
    }else if(id == 2){ 
     result = Random; 
    } 

    return result; 
} 

,但你可以」 t訪問來自靜態方法的實例變量,就像你試圖

所以你可能想要做的是構造方法中的每個對象,而不是依賴於它們的存在摹例如:

static Customer GetCustomer(int id){ 
     Customer result = null; 

     if(id == 1){ 
      result = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 

     }else if(id == 2){ 
      result = new Customer("Random Name", 2, "44 New Street, New York, NY"); 
     } 

     return result; 
    } 
+0

你可以再看看代碼,我已經添加了一些細節,使我的問題更清晰 – user133466

0

我覺得你可以使類作爲類變量:

private static Customer forest; 
private static Customer random; 

public static void main(String[] args) { 
    forrest = new Customer("Forrest Stallings", 1, "42 New Street, New York, NY"); 
    random = new Customer("Random Name", 2, "44 New Street, New York, NY"); 
    ... 
    } 

然後:

static Customer GetCustomer(int id){ 
    if(id == 1){ 
     return customer; 
    }else if(id == 2){ 
     return random; 
    } 
    } 
+0

你可以再次看看代碼,我已經添加了一些細節,使我的問題更清晰 – user133466

+0

@ user133466:你的意思是有'Customer'類的'Forrest'和'Random'子類,並且基於'id'被傳遞,你想實例化正確的類嗎? –

+0

forrest和random是類Customer的實例。對不起,大寫他們。更詳細的代碼可以在這裏找到:http://stackoverflow.com/questions/13316042/how-to-get-an-instance-of-a-class – user133466

相關問題