Java 方法的多个返回类型
有没有办法从int、String或double等方法获得不同的返回类型 我能想到的是使用泛型通配符,不确定 比如:Java 方法的多个返回类型,java,Java,有没有办法从int、String或double等方法获得不同的返回类型 我能想到的是使用泛型通配符,不确定 比如: public x m1(){ //implementation } x可以是int、string、long等,因为Java是静态类型的。您可以使用泛型或多态类型,但不能只返回任意类型(您可以返回Object…),您认为如何使用返回值 ??? value = m1() value的类型未知,您无法对其执行任何操作 但是,您可以考虑一些通用的强类型容器,类似于。ApacheComm
public x m1(){
//implementation
}
x可以是int、string、long等,因为Java是静态类型的。您可以使用泛型或多态类型,但不能只返回任意类型(您可以返回
Object
…),您认为如何使用返回值
??? value = m1()
value
的类型未知,您无法对其执行任何操作
但是,您可以考虑一些通用的强类型容器,类似于。ApacheCommonsLang3有一个例子。没有,因为Java是静态类型的。您可以使用泛型或多态类型,但不能只返回任意类型(您可以返回
Object
…),您认为如何使用返回值
??? value = m1()
value
的类型未知,您无法对其执行任何操作
但是,您可以考虑一些通用的强类型容器,类似于。ApacheCommonsLang3有,您可以拿它为例。使用对象类作为返回类型,然后使用整数或字符串(包装器)类。因此,您可以使用对象的getClass()方法来标识其类。使用对象类作为返回类型,然后使用整数或字符串(包装器)类。因此,在返回的点可以使用对象的getClass()方法来标识其类。不,一个方法只能有一种返回类型。如果要返回不同类型的对象,可以返回
Object
,但在这种情况下仍然需要强制转换。在这种情况下,您也不能返回未固定的原语(即int
或double
)
泛型可能会有所帮助,因为它们隐式地添加了一些类型转换。
然而,取决于你想要实现什么,这可能不值得
我们使用的是这样的东西,例如:
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
}
classbasicbuilder{
私有int值;
公共T设置值(int v){
值=v;
返回(T)这个;
}
}
类ConcreteBuilder扩展了BasicBuilder{
//更多
}
这样,当我有一个
ConcreteBuilder
实例并在其上调用setValue(…)
时,我将得到一个ConreteBuilder
引用。请注意,只有在正确使用泛型且强制转换有效时,此方法才有效。否,一个方法只能有一个返回类型。如果要返回不同类型的对象,可以返回Object
,但在这种情况下仍然需要强制转换。在这种情况下,您也不能返回未固定的原语(即int
或double
)
泛型可能会有所帮助,因为它们隐式地添加了一些类型转换。
然而,取决于你想要实现什么,这可能不值得
我们使用的是这样的东西,例如:
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
}
classbasicbuilder{
私有int值;
公共T设置值(int v){
值=v;
返回(T)这个;
}
}
类ConcreteBuilder扩展了BasicBuilder{
//更多
}
这样,当我有一个
ConcreteBuilder
实例并在其上调用setValue(…)
时,我将得到一个ConreteBuilder
引用。请注意,只有在正确使用泛型且强制转换有效的情况下,此操作才有效。您可以在HotSpot Java 6中使用泛型执行此操作,但这被认为是一个错误,Java 5.0和Java 7都不支持此操作
Java通常不支持上下文,但随着Java7中的隐含类型支持而不是Java8中的隐含类型支持,这种情况正在发生变化
常见的解决方法是在名称中指定类型。e、 g.通过使用
getInt()
,getLong()
,getDouble()
,getDouble()
,可以在HotSpot Java 6中使用泛型实现这一点,但这被认为是一个bug,Java 5.0和Java 7都不支持这一点
Java通常不支持上下文,但随着Java7中的隐含类型支持而不是Java8中的隐含类型支持,这种情况正在发生变化
常见的解决方法是在名称中指定类型。e、 g.使用
getInt()
,getLong()
,getDouble()
将返回类型设置为Object
,这可能有助于将返回类型设置为Object
,这可能有帮助