2013-06-03 61 views
-3

嗨,我在java中有以下場景: 我有很多類,每個類都有很多方法。現在,這個方法現在正在返回整數(注意:所有方法都以整數形式返回一些計算值)。明天這個方法可以返回與字符串或任何其他數據類型(如long等)相同的計算值。現在,將每個方法的返回類型更改爲所需的返回類型將是一件麻煩的工作。 [注意:這種情況是因爲我在框架開發之下,我的框架現在不穩定,所以像這樣的事情不斷變化]。我想知道這是否可能,創建一個返回類型,它現在將指向整數,然後在每個方法中使用這個返回類型,所以明天如果我要改變這種方法的返回類型,那麼我只需要在一個特定的地方更改並自動返回類型會改變?任何關於這個的指針。 TIA。如何在java中創建通用返回類型

+2

問題標題應該被編輯爲更準確。 – Patashu

+0

這似乎是可以通過正則表達式查找/替換或其他類型的簡單腳本解決的問題。 – Patashu

+1

你似乎在這裏領先於馬。在你輸入任何代碼之前,你需要決定你的代碼結構。 –

回答

0

您可以使用通用的方法是這樣的:

public class NewClass { 

    public static void main(String []areg){ 
    NewClass nc = new NewClass(); 
    nc.getObject(new Integer(123)); 
    nc.getObject("abc"); 
    nc.getObject(new Long(2)); 
    } 

    public <T> T getObject(T type) 
    { 
    return type; 
} 
} 
在調用代碼

,您可以檢查返回類型,然後繼續。

0

它不僅是返回類型的方法。如果你想在某個時候返回一個大整數,你還需要改變你的方法代碼來實際計算出這樣一個值。您的return聲明也需要更改,而不僅僅是方法簽名。 如果你繼續在方法中計算一個整數,那麼返回BigInteger是沒有意義的。那麼一個工具怎麼會重構你的代碼和它被使用的每一個地方呢?

我能看到的最好的事情是,如果你使用的是Java IDE,一旦你改變你的方法簽名,它會爲你輸出錯誤,在類型不匹配的地方,你可以通過這些錯誤並手動修復。

我猜你的項目是小,對於大項目,重構將是龐大的反正...

0

您可以創建一個類。這是你的用戶定義類型。 如:

public class ReturnType { 
private Object value; 

public ReturnType(Object value){ 
    this.value = value; 
} 

public Integer getIntValue(){ 
    if(value instanceof Integer) 
     return (Integer)value; 
    return null;  
} 
public Long getLongValue(){ 
    // todo 
} 

public String getStringValue(){ 
    //todo 
} 

}

的你的方法返回類型應該是 '返回類型' 類的一個實例。

像:

public ReturnType myMethod(); 

在另一個時候,你可以添加/刪除或修改返回類型類的方法。

+0

嗨瓦希德我試過你的解決方案,但我被困在這個地方。好吧,讓我告訴你真實的情況。我正在設計一個UI框架。今天我的框架使用Selenium WebDriver,所以我現在的所有方法都返回WebElement。現在明天我可能會轉移到Sahi,並且我所有的方法都需要返回BrowserElement。所以爲什麼我必須做這件事。現在,如果我通過你的解決方案,我不能使用方法WebElement接口。你能爲此建議我嗎?如果我能以某種方式創建一個指向WebElement的指針,然後使用該指針而不是WebElement,以便明天我可以將它指向Sahi –

1

這聽起來像你想的仿製藥,但需要注意的是有沒有神奇的轉變,他們返回的內容從您的編碼方法返回的類型,只有定義

public interface Calculator<T> { 
    public T method1(); 
    public T method2(); 
    public T method3(); 
} 

public class IntegerCalculator implements Calculator<Integer> { 
    public Integer method1() [ 
     // some implementation that returns an Integer 
    } 
    // similar for method2 and method3, which also return Integer 
} 

public class LongCalculator implements Calculator<Long> { 
    // similar to IntegerCalculator but all methods return Long 
} 

和你的客戶可以定義他們的代碼使用方法:

Calculator<Integer> = new IntegerCalculator(); 

,但後來改變

Calculator<Long> = new LongCalculator(); 


你將不得不仍然代碼,您要使用所有類型的實現方法,以及你的客戶端代碼將同樣必須改變到一般的工作,但是這是我會做什麼。