2012-03-14 79 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()