2012-10-03 87 views
0
public Object Convert(Class<T> Type) { 
    if (Type == Integer.class) { 
     return Integer.parseInt(DataInfo); 
    } else if (Type == String.class) { 
     return DataInfo; 
    } else if (Type == Double.class) { 
     return Double.parseDouble(DataInfo); 
    } 
    return null; 

} 

有沒有其他方法可以做到這一點?Java通用類型返回T

我只想做這樣的事情:int X = Foo.Convert<int>();

當它需要一個字符串,並將其轉換爲<Type> < -----那。我嘗試過:

public T Convert() 
{ 
} 

但我到處搜索和Java沒有typeof函數:S基本上試圖將字符串從用戶轉換爲數據類型。

編輯..我這麼問是因爲在C++中,我通常做的:

template <typename T> 
inline T ToNumber(const std::string &Text){std::istringstream SS(Text); T Result; return (SS >> Result ? Result : 0);} 

我想知道如果在Java中,我可以做到這一點..我用它喜歡:

package test; 

import java.io.*; 
import java.util.Scanner; 

public class Data<T> { 
    private String DataInfo; 

    public String ReadBuffer() throws IOException { 
     BufferedReader Buffer = new BufferedReader(new InputStreamReader(System.in)); 
     return (DataInfo = Buffer.readLine()); 
    } 

    public String ReadConsole() { 
     Console Con = System.console(); 
     return (DataInfo = Con.readLine()); 
    } 

    public String Read() { 
     Scanner Reader = new Scanner(System.in); 
     return (DataInfo = Reader.next()); 
    } 

    public Object Convert(Class<T> Type) { 
     if (Type == Integer.class) { 
      return Integer.parseInt(DataInfo); 
     } else if (Type == String.class) { 
      return DataInfo; 
     } else if (Type == Double.class) { 
      return Double.parseDouble(DataInfo); 
     } 
     return null; 

    } 
} 
+0

你只能在C#中做到這一點。 – SLaks

+0

相關:http://stackoverflow.com/questions/9950800/java-generic-string-to-t-parser – BalusC

+0

你的功能的用戶通過它是通用的獲得什麼?換句話說,爲什麼用戶不需要'int x = Integer.parseInt(「2」);'當他需要'int','Foo f = Foo.valueOf(「fooData {2,3}」 )'當他需要'Foo'等時?在我看來,調用者需要知道具體的類型,邏輯會根據具體的類型做不同的事情,所以在泛型中沒有太大的收穫。 –

回答

2

由於類型刪除,這是完全不可能的。

您可以做的最好的呼叫者通過Class<T>

+0

嗯好的謝謝。有點失望,因爲我剛剛學習Java,這是首先想到的事情之一。鑄件。但我想明確地做到這一點很好。 – Brandon

0

也許你可以看一下com.google.inject.TypeLiteral,因爲它可以通過刪除來獲取你的。它將保持原始(非通用)類型。