2014-02-27 32 views
0

我是一名java初學者,雖然我在這裏和Google上都找過這個話題,但我還沒有找到它。我確定它必須在那裏,但是我不知道如何搜索。無論如何,這裏是:Java:如何將A型轉換爲B型?

我怎樣才能編寫方法來從字符串/整數/等轉換。到一個班,反之亦然?我一定會喜歡我的班級轉換是自動的,但我可以生活在不太完美的類型轉換中。我不舒服的是調用類(「一些字符串」)或class.toString()來回轉換從字符串類。我希望它儘可能無縫。這裏有一個例子:

我有一個IsFound行爲像一個布爾型的類,我用它作爲方法中的返回類型;在方法體中,我返回一個字符串,如「找到」(而不是true)。你可能會因爲我沒有使用布爾值而嘲笑我,但我想用自定義的類/類型玩一點。這是一些代碼

public class IsFound{ 

    public boolean found; // field 

    public IsFound(String isFound_){ 
     if(isFound_.equals("FOUND")){ 
       found = true; 
     else found = false; 
     } 
    } 

    public String toString(){ 
    if(found) return "found"; 
    else return "not found"; 
    }  
} 

這是我能得到的最遠的。我需要轉換器方法來/從字符串和未來的引用我想知道轉換器是否適用於int,char或甚至其他類。

擴展布爾的解決方案只是作爲最後的手段,因爲我不知道我正在攜帶什麼臃腫 - 我想從0創建我自己的類。0編輯: 我想能夠使用類似的東西:

public IsFound parse(String substring_){ 
    if(search(substring_, string) == true){ 
     return FOUND; // or return "FOUND"; 
    { 
    return NOTFOUND; // or return "NOT FOUND"; 
{ 

目前它給出的錯誤不能從字符串轉換爲IsFound。我想填補這個空白。

+1

「我會不舒服與調用類的來回轉換(」一些字符串「)或class.toString()字符串類「你剛剛排除了這些情況下使用的機制。如果你想在兩個不同的具體類之間進行轉換,你必須有代碼才能這樣做。這意味着要麼調用「新發現(字符串)」或調用「Found.parseString(字符串)」或類似的東西。 – dcsohl

+0

如果我不能從java的autoconvert(類似於C++中的操作符重載這樣的無縫操作)至少我想要一個轉換器方法能夠使用類型轉換(IsFound)字符串 – mireazma

+0

不,你不能從字符串類型轉換其他。期。這個問題強烈地感染了一個經典的[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem),你不僅咆哮錯誤的樹,但看着錯誤的森林。 –

回答

1

您的問題與傳統的XY Problem有異曲同工之處在於您似乎在咆哮錯誤的樹狀圖以找到解決方案,以解決您可能需要更好地理解的問題。嘗試使用字符串替代類型是一種反模式,所以你最好不要這樣做。對於這樣的事情,可以考慮使用布爾型的雙態類型或枚舉多態類型。

例如,

public enum IsFound{ 
    FOUND, NOT_FOUND, UNKNOWN 
} 

或...

public enum IsFound { 
    FOUND("Found"), NOT_FOUND("Not Found"), UNKNOWN("Unknown"); 

    private String name; 

    private IsFound(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 

    @Override 
    public String toString() { 
     return name; 
    } 

} 
在其它的類

private Map<Luggage, IsFound> lostLuggageMap = new HashMap<>(); 
  • 枚舉補充說,絃樂根本沒有編譯時類型安全。
  • 枚舉可以擁有非常有用的屬性和行爲(方法)。
+0

它看起來是最直接的方式。但對我來說有點模糊:我可以使用類似「return FOUND」的東西嗎? – mireazma

+1

return IsFound.FOUND – sethro

+0

我甚至懷疑這是什麼意思:「private Map lostLgageMap = new HashMap <>();」 – mireazma

0

對於「字符串」表示和POJO(普通的舊Java對象)之間的轉換,您可能想要使用已知文本格式(如JSON(或XML))來序列化。

public class Search { 

private boolean found; 

// getters, setters, constructor 

} 

序列化/反序列化使用谷歌的GSON庫:

Search search = new Search(); 
search.setFound(true); 

Gson gson = new Gson(); 
String json = gson.toJson(search); 
// should output : { "found" : "true" } 

// The opposite way , if json is a string equal to { "found" : "true" } 
Gson gson = new Gson(); 
Search s = gson.fromJson(json, Search.class); 
// s has found = true 
+0

我不明白。我讀過10次。我不知道json和gson是什麼。我需要一個代碼才能最終輸入「return FOUND;」或「返回」FOUND「」,這可以轉換爲ISFound類。 – mireazma

+0

JSON是一種數據格式; GSON是由Google提供的圖書館;使用JSON和GSON,您可以在「字符串」和「Java對象」之間進行轉換。例如,諸如「{x:5,y:6}」之類的字符串可以轉換爲Java類Point和Back; – MadSeb

1

我也想用一個枚舉,這裏有一個,讓你所有的就是在你的類的功能。

public enum IsFound{ 
    // each of these definitions are like calls to the IsFound constructor below 
    FOUND("found"), 
    NOT_FOUND("not found"); 

    // string representation 
    private final String toString; 

    private IsFound(String isFound){ 
     this.toString = isFound; 
    } 

    /** 
    * @Override 
    */ 
    public String toString(){ 
     return toString; 
    }  


    // I think this is what you want. I'm not sure why you need this, but 
    // am including it as I think it gives you what you want. see example below 
    public static IsFound convert(String foundString){ 
     if(FOUND.toString.equals(foundString)){ 
     return FOUND; 
     } 
     else if(NOT_FOUND.toString.equals(foundString)){ 
     return NOT_FOUND; 
     } 
     else{ 
     return null; 
     } 
    } 
    } 

您可以通過以下方式使用:

private IsFound myFoundValue; 

myFoundValue = IsFound.FOUND; 

System.out.println(myFoundValue.toString()); // "found" 

myFoundValue = IsFound.NOT_FOUND; 

System.out.println(myFoundValue.toString()); // "not found" 

switch(myFoundValue){ 
    case FOUND: 
    System.out.println("the value is FOUND"); 
    break; 
    case NOT_FOUND: 
    System.out.println("the value is NOT_FOUND"); 
    break; 
    default: 
    System.out.println("this should never happen"); 
    break; 
} 

myFoundValue = IsFound.convert("found"); // IsFound.FOUND 

System.out.println(myFoundValue.toString()); // "found" 
+0

我在努力尋找如何關聯一個常量元素,無論是int,string等與一些調用方法的返回類型(請參閱我的原始文章的下半部分)。我仍然在網上搜索... – mireazma

+0

你問如何通過傳遞一個字符串來搜索一個IsFound?像: 公共IsFound轉換(String foundString)... – sethro

+0

我添加了一個函數,我認爲做你想要的:'convert()'。 – sethro

相關問題