当前位置:编程学习 > JAVA >>

我有一个函数,我需要它有两个返回值

我有一个函数,我需要它有两个返回值,一个是boolean类型,一个是double类型,我为了获得这两个值,使用:Object[] result = new Object[] {true, 56.00};
return result;
这种方法。
为了读取这两个值,我使用:Object[] result = calculation (x1, x2);
boolean judge = (boolean)result[0];
double value = (double)result[1];
我经过试验,上述方法确实可以行得通,请问这种方法有什么缺点?还有更好的方法吗? --------------------编程问答-------------------- 坏处就是你就是要关注其中的类型,而且难以服用
可以用泛型

public class TwoTuple<A,B> {
public final A first;
public final B second;
public TwoTuple(A  a,B b){
first=a;
second=b;
}
public String toString(){
return ")"+first+", " +second+")";
}
public static void main(String[] args){
TwoTuple two=new TwoTuple(true,56.00);
System.out.println(two.first+"\n"+two.second);

}
--------------------编程问答-------------------- 说错了,难以复用 --------------------编程问答-------------------- sorry,main函数里面错了
public static void main(String[] args){
TwoTuple<Boolean,Double> two=new TwoTuple<Boolean,Double>(true,56.00);
Boolean bo=two.first;
Double st=two.second;

}

这样放进去的时候就告诉编译器你放进去的是什么类型,取出的时候就自动知道是什么类型,无需强制转型。不会出现类型上的错误了 --------------------编程问答-------------------- 这个时候就知道Java的不好了吧。。。 --------------------编程问答-------------------- 其它你还可以定义一个实体类,存放这两个值,返回的时候,返回这个对象,取出相应的属性! --------------------编程问答-------------------- 2楼正解,可以用泛型
还有一种解法 将得到的两个返回值放到StringBuffer来拼接“boolean:double,”
取返回值是解析这个String就行 --------------------编程问答--------------------
引用 4 楼 healer_kx 的回复:
这个时候就知道Java的不好了吧。。。


哈哈,顶 --------------------编程问答-------------------- 凭借一个类似于结构体的类,返回这个类吧。。 --------------------编程问答-------------------- 除了javabean还可以考虑JSON字符串^_^ --------------------编程问答-------------------- public class commonResult{
    private boolean status;
    private Object value;
    private String msg;
} --------------------编程问答-------------------- 把要返回的两个值写成一个类,类里有两个属性,这两个属性就是你要的返回值,不知道你听明白没有? --------------------编程问答-------------------- 2楼的方法还是比较好的 --------------------编程问答--------------------  c 语言里面的话可以用结构体,面向对象里面只有 class 。所以可以用一个类存储两个值,返回 class  --------------------编程问答-------------------- 可存于map里边 --------------------编程问答-------------------- 写成实体类 虽然看似繁琐 但不容易出错 
像你那样写 稍微不细心 容易转换错误 --------------------编程问答-------------------- 用泛型一定更好么?如果确定是两个这样的值,为什么需要泛型??又不是什么通用操作。
用一个类不错。 --------------------编程问答-------------------- 无论是返回范型、数组还是对象,都可以
主要是看你有没有必要考虑复用 --------------------编程问答-------------------- 自己一个人写的时候有楼主的方法就行,多人开发时用实体类 --------------------编程问答-------------------- 其实感觉楼主的方法还是有点面向过程的方式,建议采用面向对象的方法来做。
可以用泛型。如果值的类型是固定的这两种,可以用类。

楼主方法的缺点就是要每次都做类型转换,而且代码的易读性就变差了。 --------------------编程问答-------------------- 缺点:参数类型没有暴露,调用者不知道你返回的是啥,后期维护困难.
--------------------编程问答--------------------
引用 3 楼 Cecil_911 的回复:
sorry,main函数里面错了
public static void main(String[] args){
TwoTuple<Boolean,Double> two=new TwoTuple<Boolean,Double>(true,56.00);
Boolean bo=two.first;
Double st=two.second;

}

这样放进去的时候就告诉编译器你放进去的是什么类型,取出的时候就自动知道是什么类型,无需强制转型。不会出现类型上的错误了

那这样的话,这个函数是不是必须是TwoTuole类的方法才可以啊?还有可不可以返回3个值、4个值,甚至更多? --------------------编程问答--------------------
引用 3 楼 Cecil_911 的回复:
sorry,main函数里面错了
public static void main(String[] args){
TwoTuple<Boolean,Double> two=new TwoTuple<Boolean,Double>(true,56.00);
Boolean bo=two.first;
Double st=two.second;

}

这样放进去的时候就告诉编译器你放进去的是什么类型,取出的时候就自动知道是什么类型,无需强制转型。不会出现类型上的错误了

911回复好细心啊。。 --------------------编程问答--------------------
引用 3 楼 Cecil_911 的回复:
sorry,main函数里面错了
public static void main(String[] args){
TwoTuple<Boolean,Double> two=new TwoTuple<Boolean,Double>(true,56.00);
Boolean bo=two.first;
Double st=two.second;

}

这样放进去的时候就告诉编译器你放进去的是什么类型,取出的时候就自动知道是什么类型,无需强制转型。不会出现类型上的错误了


这就是一个Value Object 模式,用法911童鞋写的很清楚了。
刚google了一把,好多介绍,楼主自己看吧 --------------------编程问答-------------------- 可以用集合 --------------------编程问答-------------------- java似乎没有提供直接的语法支持。不过这种情况下,一般应该用实例封装状态,即函数的返回值。

题外话是:像boolean和double这种东西,在更彻底的OO理论中是不应该存在的。语言支持它们,在于为工作提供方便,但至少不能滥用吧。楼主这种情况,我得理解就是滥用了。 --------------------编程问答--------------------
引用 1 楼 Cecil_911 的回复:
坏处就是你就是要关注其中的类型,而且难以服用
可以用泛型

public class TwoTuple<A,B> {
public final A first;
public final B second;
public TwoTuple(A  a,B b){
first=a;
second=b;
}
public String toString(){
return ")"+first+", " +second+")";
}
public static void main(String[] args){
TwoTuple two=new TwoTuple(true,56.00);
System.out.println(two.first+"\n"+two.second);

}
public final A first;
public final B second;有问题吧 --------------------编程问答--------------------
引用 26 楼 stubble 的回复:
Quote: 引用 1 楼 Cecil_911 的回复:

坏处就是你就是要关注其中的类型,而且难以服用
可以用泛型

public class TwoTuple<A,B> {
public final A first;
public final B second;
public TwoTuple(A  a,B b){
first=a;
second=b;
}
public String toString(){
return ")"+first+", " +second+")";
}
public static void main(String[] args){
TwoTuple two=new TwoTuple(true,56.00);
System.out.println(two.first+"\n"+two.second);

}
public final A first;
public final B second;有问题吧

看成c#得了  误会 不好意思 --------------------编程问答-------------------- 要我肯定写一个类了。然后类里面有两个变量。这样不就得了么? --------------------编程问答-------------------- 搞个容器装一下 以前有用异常的 但是感觉还不如这个。 --------------------编程问答-------------------- 我认为用实体类最好,你直接放对象读取对象的属性就好了! --------------------编程问答-------------------- 个人觉得还是使用集合比较好 --------------------编程问答-------------------- 个人感觉用类会比较好,能随意改变类型和增加个数,便于动态修改,返回一个对象也容易实现。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,