2012-03-14 77 views
0

有沒有辦法從像int或String或double這樣的方法獲取不同的返回類型?來自方法的多於一種返回類型

什麼,我能想到的是使用泛型通配符,不知道

一樣的:

public x m1(){ 
//implementation 
} 

x可以是int,字符串長等

+1

返回類型爲'Object' – Rakesh 2012-03-14 09:41:53

+0

爲什麼你需要這個? – Matthias 2012-03-14 09:42:20

+0

也許這有助於http://stackoverflow.com/questions/450807/java-generics-how-do-i-make-the-method-return-type-generic – hellectronic 2012-03-14 09:43:12

回答

2

沒有,因爲Java是靜態類型。你可以使用泛型或多態類型,但是你不能只返回任意類型(好吧,你可以返回Object ...)你認爲如何處理返回值?

??? value = m1() 

類型的value是未知的,你不能做任何事情。

但是,您可以想到一些類似於Either的泛型強類型容器。 Apache Commons Lang 3有Pair<L,R>,您可以將其作爲示例。

0

使用Object類作爲返回類型,然後使用Integer或String(Wrapper)類。所以你要返回的地方可以使用Object的getClass()方法來識別它的類。

1

不,一個方法只能有一個返回類型。如果你想返回不同類型的物體,你可以返回Object,但是你仍然必須在這種情況下施放。在這種情況下,您也無法返回無箱基元(即intdouble)。

泛型可能會有所幫助,因爲它們隱含地添加了一些這些類型。 但是,取決於你想達到什麼,它可能不值得。

我們使用這樣的事情,例如:

class BasicBuilder<T extends BasicBuilder<T>> { 
    private int value; 

    public T setValue(int v) { 
    value = v; 
    return (T)this; 
    } 
} 

class ConcreteBuilder extends BasicBuilder<ConcreteBuilder> { 
    //more here 
} 

這樣,當我有一個ConcreteBuilder實例,並在其上調用setValue(...),我會得到一個ConreteBuilder參考回來。請注意,這隻適用於泛型正確使用且演員陣容有效的情況。

1

你可以在帶有泛型的HotSpot Java 6中做到這一點,但這被認爲是一個錯誤,Java 5.0和Java 7都支持這一點。

http://vanillajava.blogspot.com/2011/02/with-generics-return-type-is-part-of.html

的Java一般不情境感知,但這是隱含類型支持Java 7中不斷變化的,而不是隱含的類型與Java 8

常見的解決方法是指定的類型名稱。例如ByteBuffer或DataInput與getInt(),getLong(),getDouble()