嗨,我在java中有以下場景: 我有很多類,每個類都有很多方法。現在,這個方法現在正在返回整數(注意:所有方法都以整數形式返回一些計算值)。明天這個方法可以返回與字符串或任何其他數據類型(如long等)相同的計算值。現在,將每個方法的返回類型更改爲所需的返回類型將是一件麻煩的工作。 [注意:這種情況是因爲我在框架開發之下,我的框架現在不穩定,所以像這樣的事情不斷變化]。我想知道這是否可能,創建一個返回類型,它現在將指向整數,然後在每個方法中使用這個返回類型,所以明天如果我要改變這種方法的返回類型,那麼我只需要在一個特定的地方更改並自動返回類型會改變?任何關於這個的指針。 TIA。如何在java中創建通用返回類型
回答
您可以使用通用的方法是這樣的:
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;
}
}
在調用代碼
,您可以檢查返回類型,然後繼續。
它不僅是返回類型的方法。如果你想在某個時候返回一個大整數,你還需要改變你的方法代碼來實際計算出這樣一個值。您的return
聲明也需要更改,而不僅僅是方法簽名。 如果你繼續在方法中計算一個整數,那麼返回BigInteger是沒有意義的。那麼一個工具怎麼會重構你的代碼和它被使用的每一個地方呢?
我能看到的最好的事情是,如果你使用的是Java IDE,一旦你改變你的方法簽名,它會爲你輸出錯誤,在類型不匹配的地方,你可以通過這些錯誤並手動修復。
我猜你的項目是小,對於大項目,重構將是龐大的反正...
您可以創建一個類。這是你的用戶定義類型。 如:
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();
在另一個時候,你可以添加/刪除或修改返回類型類的方法。
嗨瓦希德我試過你的解決方案,但我被困在這個地方。好吧,讓我告訴你真實的情況。我正在設計一個UI框架。今天我的框架使用Selenium WebDriver,所以我現在的所有方法都返回WebElement。現在明天我可能會轉移到Sahi,並且我所有的方法都需要返回BrowserElement。所以爲什麼我必須做這件事。現在,如果我通過你的解決方案,我不能使用方法WebElement接口。你能爲此建議我嗎?如果我能以某種方式創建一個指向WebElement的指針,然後使用該指針而不是WebElement,以便明天我可以將它指向Sahi –
這聽起來像你想的仿製藥,但需要注意的是有沒有神奇的轉變,他們返回的內容從您的編碼方法返回的類型,只有定義:
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();
你將不得不仍然代碼,您要使用所有類型的實現方法,以及你的客戶端代碼將同樣必須改變到一般的工作,但是這是我會做什麼。
- 1. Java返回類型通用
- 2. Java - 返回類型的通用類型
- 3. 如何在TypeScript中使用返回類型創建函數?
- 4. java中的通用返回類型返回對象
- 5. Java通用接口返回類型
- 6. Java通用返回類型問題
- 7. Java通用類型返回T
- 8. 如何在Mono.Cecil中爲MethodReference創建GenericParameter返回類型?
- 9. 返回類型Pthread使用C++創建
- 10. 如何設置通用返回類型
- 11. 類返回類型創建方法
- 12. Java返回類型
- 13. 針對已經創建的哈希映射的Java通用hashmap返回類型
- 14. 通用返回從類型
- 15. 與通用返回類型
- 16. 通用返回類型
- 17. JMock通用返回類型
- 18. 如何用返回類型map <>創建一個函數?
- 19. 如何在Java泛型方法中定義返回類型?
- 20. 如何使用泛型在Java中創建通用方法?
- 21. 在泛型方法中創建返回類型的實例
- 22. 創建泛型類來返回表
- 23. 創建Haxe extern,返回類型
- 24. Java:如何創建一個通用ENUM類型
- 25. Java中的整型返回類型
- 26. 返回泛型類型在Java
- 27. 返回Java中的嵌套類類型
- 28. C++ typedef和返回類型:如何讓編譯器識別使用typedef創建的返回類型?
- 29. 如何在c#中爲通用類型創建實例#
- 30. 如何在C#/ .NET 4中創建通用代理的類型?
問題標題應該被編輯爲更準確。 – Patashu
這似乎是可以通過正則表達式查找/替換或其他類型的簡單腳本解決的問題。 – Patashu
你似乎在這裏領先於馬。在你輸入任何代碼之前,你需要決定你的代碼結構。 –