问题描述
假如我有一个方法获取回来的数据可能是int,string或者boolean类型的,如果我把这个方法的返回类型固定,那么就要写publicintgetInt(),publicStringgetString(),publicbooleangetBoolean()三个方法,但是如果我把返回类型写成object,那么我只要写一个ObjectgetObject方法就可以了,使用的时候都知道需要什么类型,比如我需要返回int类型,那么我就写成inti=(Integer)getObject()就可以了,请问这样合理吗?有什么弊端?
解决方案
解决方案二:
合理。好多API就这么设计的。
解决方案三:
这样做没有问题,但是有更好的解决办法啊,用泛型。你可以看看java泛型的资料。
解决方案四:
引用2楼hexing1991的回复:
这样做没有问题,但是有更好的解决办法啊,用泛型。你可以看看java泛型的资料。
例子:public<T>TgetValue(){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种类型,给个具体的例子.
解决方案十三:
Objecto=getObject();if(oinstanceofInteger){}elseif(oinstanceofString){}
解决方案十四:
楼上说的都对
解决方案十五:
引用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是否可转为此类型
其他方案:
没问题啊万物皆对象。
其他方案:
如果是用jdk1.4只能用getObject()然后自己强制转换.你没有看到jdbc时有rs.getObject()一招全通.通用是要付出代价的,出来是Object每次要转换,很麻烦!!还不知道是什么类型!!如果用1.5比较好办泛型就可以了:使用方法时指定类型既可.