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

方法返回类型直接用object合理吗?

假如我有一个方法获取回来的数据可能是int,string或者boolean类型的,如果我把这个方法的返回类型固定,那么就要写public int getInt(),public String getString(),public boolean getBoolean()三个方法,但是如果我把返回类型写成object,那么我只要写一个Object getObject方法就可以了,使用的时候都知道需要什么类型,比如我需要返回int类型,那么我就写成int i = (Integer)getObject()就可以了,请问这样合理吗?有什么弊端? java object 方法 --------------------编程问答-------------------- 合理。好多API就这么设计的。 --------------------编程问答-------------------- 这样做没有问题,但是有更好的解决办法啊,用泛型。你可以看看java泛型的资料。 --------------------编程问答--------------------
引用 2 楼 hexing1991 的回复:
这样做没有问题,但是有更好的解决办法啊,用泛型。你可以看看java泛型的资料。

例子:
public <T>T getValue(){
  return (T)value;
} --------------------编程问答--------------------
大家能给个API的例子学习学习吗?虽然这样很方便,但是如果不写明返回类型,别人调用会不会不知道用什么类型来使用? --------------------编程问答-------------------- 调用只要强转类型就可以了。有固定返回类型就固定好了,为什么还要用Object类型呢?或者是,返回的类型连你也不能确定是什么? --------------------编程问答--------------------
引用 5 楼 crazybye 的回复:
调用只要强转类型就可以了。有固定返回类型就固定好了,为什么还要用Object类型呢?或者是,返回的类型连你也不能确定是什么?

上面写了,返回值有三种类型,如果写固定类型就要写三个方法,如果写object就只用一个方法 --------------------编程问答-------------------- 哦,那就直接用Object+泛型呗。其实不用泛型,某些idea工具也是支持调错的。 --------------------编程问答-------------------- 不过我比较不理解,如果返回一个object,那么我应该用什么类型去接收呢?如果我需要一个int,那么我怎么知道这个object返回的是int而不是别的类型呢? --------------------编程问答-------------------- 调用该方法的人肯定知道想要什么样的结果才会调用,自然知道返回值的类型,用Object 来接受这样的返回值的解决方案还是可以的。 --------------------编程问答--------------------
引用 9 楼 zhzwsjc1000 的回复:
调用该方法的人肯定知道想要什么样的结果才会调用,自然知道返回值的类型,用Object 来接受这样的返回值的解决方案还是可以的。

假如像我说的返回值可能有三种类型,那么应该怎么去判断呢? --------------------编程问答--------------------
引用 10 楼 fghnn 的回复:
Quote: 引用 9 楼 zhzwsjc1000 的回复:

调用该方法的人肯定知道想要什么样的结果才会调用,自然知道返回值的类型,用Object 来接受这样的返回值的解决方案还是可以的。

假如像我说的返回值可能有三种类型,那么应该怎么去判断呢?

我在想什么样的情况返回值才会出现3种类型,给个具体的例子. --------------------编程问答-------------------- Object o = getObject();
if(o instanceof Integer) {

} else if (o instanceof String) {

} --------------------编程问答-------------------- 楼上说的都对 --------------------编程问答--------------------
引用 11 楼 zhzwsjc1000 的回复:
Quote: 引用 10 楼 fghnn 的回复:

Quote: 引用 9 楼 zhzwsjc1000 的回复:

调用该方法的人肯定知道想要什么样的结果才会调用,自然知道返回值的类型,用Object 来接受这样的返回值的解决方案还是可以的。

假如像我说的返回值可能有三种类型,那么应该怎么去判断呢?

我在想什么样的情况返回值才会出现3种类型,给个具体的例子.


我上面说的是三种返回值,但是比如网络下载,比如socket传输,返回值都不止三种了,我说的不是一次返回三种类型,而是说返回值是一个objcet但是无法确定具体类型 --------------------编程问答--------------------
引用 6 楼 fghnn 的回复:
Quote: 引用 5 楼 crazybye 的回复:

调用只要强转类型就可以了。有固定返回类型就固定好了,为什么还要用Object类型呢?或者是,返回的类型连你也不能确定是什么?

上面写了,返回值有三种类型,如果写固定类型就要写三个方法,如果写object就只用一个方法


int和boolean可以向上安全转型为String,所以直接返回String就可以了 --------------------编程问答-------------------- 其实就楼主的问题,object和泛型都是可以的,不过object强转的时候要小心转换异常等问题 --------------------编程问答-------------------- 可以用 instanceof 进行判断 如果是你需要的类型就 将其强转 --------------------编程问答-------------------- 不合理

1.不好的接口设计,接口设计尽量做到不了解内部都可以使用,你这个还要必须看里面代码才知道如何使用
2.安全,由于第一条也就带来了安全问题,比如在内部没有控制好,人家本来想要int,所以后面强转int,但是你返回的object不是int类型的装箱,则会报错.
3.性能,调此方法返回结果时,先装了一次箱,在你得到结果使用时又做了一次拆箱.所以性能可能会有一定的影响. --------------------编程问答--------------------
引用 18 楼 jinfengyiye 的回复:
不合理

1.不好的接口设计,接口设计尽量做到不了解内部都可以使用,你这个还要必须看里面代码才知道如何使用
2.安全,由于第一条也就带来了安全问题,比如在内部没有控制好,人家本来想要int,所以后面强转int,但是你返回的object不是int类型的装箱,则会报错.
3.性能,调此方法返回结果时,先装了一次箱,在你得到结果使用时又做了一次拆箱.所以性能可能会有一定的影响.



代码量和可维护性的取舍 --------------------编程问答-------------------- 泛型搞起!! --------------------编程问答-------------------- 请使用泛型。 --------------------编程问答-------------------- 这里我觉得泛型和Object多差不太多了,泛型最后不也擦除了? --------------------编程问答-------------------- 合理,不过强制转换可能出错,你需要确定返回的value是否可转为此类型 --------------------编程问答-------------------- 没问题啊  万物皆对象。 --------------------编程问答-------------------- 如果是用 jdk 1.4 只能用 getObject() 然后自己强制转换.
你没有看到jdbc时有 rs.getObject() 一招全通.
通用是要付出代价的, 出来是Object每次要转换,很麻烦!! 还不知道是什么类型!!

如果用1.5 比较好办 泛型就可以了: 使用方法时指定类型既可.
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,