我的計算機上有一個程序模擬互聯網上的服務器,假服務器需要能夠向某些類發送多個數據類型。例如,在程序的一個點上,服務器需要將一個int發送給一個類,然後將該int轉換爲一個字符串並將其發送給另一個。如何讓方法具有不同的輸入類型java
基本上我問的是,如果一個方法可以有多個數據類型的輸入(這是否有意義?如果沒有生病嘗試解釋更好)。有沒有辦法做到這一點,而不創建許多不同的方法?
編輯:也就是有沒有辦法告訴傳入的類型之間的差異(以防止錯誤)
我的計算機上有一個程序模擬互聯網上的服務器,假服務器需要能夠向某些類發送多個數據類型。例如,在程序的一個點上,服務器需要將一個int發送給一個類,然後將該int轉換爲一個字符串並將其發送給另一個。如何讓方法具有不同的輸入類型java
基本上我問的是,如果一個方法可以有多個數據類型的輸入(這是否有意義?如果沒有生病嘗試解釋更好)。有沒有辦法做到這一點,而不創建許多不同的方法?
編輯:也就是有沒有辦法告訴傳入的類型之間的差異(以防止錯誤)
如果我理解正確的叫,你問如果一個方法foo()
可以有多個不同的輸入,其參數
這樣foo(Integer i)
和foo(String s)
被包圍以同樣的方法。
答案:是的,但它不是漂亮
foo(Object o)
是您的方法聲明
現在,你需要理清不同類型的可能性
if(o instanceof Integer){
stuff();
} else if (o instanceof String){
moreStuff();
}
剛剛鏈其他/ if語句爲期望的結果。
你可以擁有這需要Object
這是任何類型的方法。在Java 5.0和更高版本中,原語將被自動裝箱並作爲對象傳遞。
void method(Object o);
可以使用
method(1);
method("hello world");
method(new MyClass());
method(null);
你想要的是通用方法或類。 檢查的對象是你必須使用「的instanceof」方法
你可以讓整個類通用或只是一個單一的方法,一個泛型類的例子是什麼類型:
package javahowto;
public class Member<T> {
private T id;
public Member(T id) {
this.id = id;
}
public T getId() {
return id;
}
public void setId(T id) {
this.id = id;
}
public static void main(String[] args) {
Member<String> mString = new Member<String>("id1");
mString.setId("id2");
System.out.printf("id after setting id: %s%n", mString.getId());
//output: id after setting id: id2
Member<Integer> mInteger = new Member<Integer>(1);
mInteger.setId(2);
System.out.printf("id after setting id: %d%n", mInteger.getId());
//output: id after setting id: 2
}
現在你現在要找什麼,我相信你會找到你的問題的最佳解決方案。
退房: http://download.oracle.com/javase/tutorial/java/generics/index.html http://en.wikipedia.org/wiki/Generics_in_Java
...
嗯,我也想知道以下塊寫道。我認爲instanceof更好,但我試過getclass。
公共靜態無效的主要(字串[] args){
System.out.println(method("This is a test"));
}
private static String method(Object o){
System.out.println(o.toString());
String status = "";
String className;
String[] oList = {"Double","Integer","String","Double","Float","Byte","Short","Long","Character","Boolean" };
for(int i = 0;i<oList.length;i++){
className = "java.lang." + oList[i];
Class testClass;
try {
testClass = Class.forName(className);
if(o.getClass().equals(testClass)){
status = "Your object is " + oList[i];
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return status;
}
您可以使用 「散列適配器」 的格局。
Public interface Adapter {
Public void handle(object o);
}
Public class StringAdapter implements Adapter {
Public void handle(String st) { // stuff ...
}
Public class IntegerAdapter implements Adapter {
Public void handle(Integer intgr) { // stuff ...
}
Private static final Map adapters = new HashMap();
Adapters.put(string.class, new stringAdapter());
Adapters.put(Integer.class, new IntegerAdapter());
Public void handleMe(Object o) {
Adapters.get(o.getClass()).handle(o);
}
我一直喜歡這個比ol級聯的ifs和else's更多。
在我的iPad上對格式化和簡潔以及拼寫感到抱歉。
您能張貼一些示例代碼嗎? –