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

问题描述

假如我有一个方法获取回来的数据可能是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比较好办泛型就可以了:使用方法时指定类型既可.

时间: 2025-01-21 06:34:31

方法返回类型直接用object合理吗?的相关文章

子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类

Overload译为重载:Override译为重写或者覆盖:  Overload讨论: Java中同一个类不可以有两个相同的方法(方法名.参数类型.参数个数和参数位置都  相同).但可以有方法名相同,参数不同(参数类型.参数个数和参数位置不相同)的方法.这  种相同的方法名,参数不同的方法称为重载. public class Test { public void fn(String name) {} public void fn(int age) {} public void fn(String

java-collection接口的iterator方法返回类型?

问题描述 collection接口的iterator方法返回类型? collection接口的iterator方法返回类型是接口类型,怎么理解? 解决方案 这很正常,你直接用接口调用里面的方法就可以了.你不用关心具体实现接口的类是哪个. 解决方案二: 就好比计算机提供USB接口,你插上打印机.扫描仪.手机.U盘都可以,计算机认这个接口,而不管具体你是什么设备插进来了. 如果计算机不是提供USB接口,而是打印机一个口.扫描仪一个口.手机一个口--(别忘了光手机还有很多种呢),那多么麻烦. 一个道理

webservice-WebService中方法返回类型为Map时发布报错

问题描述 WebService中方法返回类型为Map时发布报错 发布时报错: 解决方案 webservice返回的应该是json格式吧.你MAP格式要转换成json 解决方案二: webservice返回的是xml格式的soap消息吧.现在的情况是发布webservice的时候报错

方法返回类型一问,多谢

问题描述 一般方法返回类型痿void的时候,我习惯这么写:public void xxx(){ //...内容省略.......}而现在看别人的代码,总是这样写的:public void xxx(){ //...内容省略....... return:}加了一条空的rerun语句,仍然不返回请问:加上一条语句return:有什么好处吗?如果没有好处的话,又为什么要加它呢?多谢!问题补充:TO:stephen830 我主要问的就是# public void xxx(){ # //...内容省略...

jsp中application.getAttribute()的返回类型是什么?

问题描述 <%@ page import="java.util.*"%><%@ page language="java" contentType="text/html;charset=gb2312"%><html><body><% int num; if(application.getAttribute("num")==null) { application.setAttr

Object转Integer类型失败,转Long型可以,方法返回值为1,并没有超过两个类型的范围

问题描述 Object转Integer类型失败,转Long型可以,方法返回值为1,并没有超过两个类型的范围 在网上找的尚硅谷的教学视频 其中有添加权限一段 String hql="select count(*) from Right r where r.rightUrl=?"; //此处不能用integer只能Long Long count=(Long) this.uniqueResult(hql, url); System.out.println(count); 下面是uniqueR

C# web api返回类型设置为json的两种方法

 web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面为大家介绍几种不错的方法 web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法:  方法一:(改配置法)    找到Global.asax文件,在Application_Start()方法中添加一句:   代码如下: GlobalConfiguration.Configuration.Formatters.

C# web api返回类型设置为json的两种方法_实用技巧

web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Application_Start()方法中添加一句: 复制代码 代码如下: GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 修改后: 复制代码 代码如下: protected void

Java方法的参数和返回类型统一为Map是否合理?

问题描述 开发一个Web应用. 主管要求 所有业务逻辑的Java方法参数和返回类型必须统一为Map类型.理由是将来扩展时接口不用修改.而且有多返回值的方法也好处理但是这样一来.返回一个String都要写成 Map resultMap = doXXXXX(paramMap);String result = (String)resultMap.get("resultStr");返回一个VOMap resultMap = doXXXXX(paramMap);XXXXVO resultVO =