首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

返回复杂对象或使用引用/输出参数是更好的做法吗?

对于这个问答内容,我的回答如下:

首先,返回复杂对象或使用引用/输出参数并不是更好的做法,因为它们可能会导致不可预测的行为和错误。在编程中,最好使用明确、简单和可预测的接口和输出格式来避免潜在的问题。

相反,更好的做法是使用对象映射(Object Mapping)或函数式编程范式(Functional Programming Paradigm)来处理复杂对象和引用/输出参数。对象映射是一种将复杂对象映射到更简单、更易于使用和测试的格式的技术,而函数式编程范式是一种基于函数和不可变数据的编程范式,可以避免可变状态和并发问题。

此外,如果需要返回复杂对象或使用引用/输出参数,则应该使用适当的错误处理和验证机制来避免不可预测的行为和错误。例如,可以使用类型检查、数据验证和异常处理等技术来确保返回的参数是正确和安全的。

总之,返回复杂对象或使用引用/输出参数并不是更好的做法,而应该使用适当的技术和方法来处理它们。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

面试题集锦

第二道,好经典题,为此跟不少人争论过 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象属性,并可返回变化后结果,那么这里到底值传递还是引用传递? 答:值传递。...Java语言方法调用只支持参数值传递。当一个对象实例作为一个参数被传递到方法中时,参数值就是对该对象引用对象 属性可以在被调用过程中被改变,但对对象引用改变不会影响到调用者。...C++和C#中可以通过传引用输出参数来改变传入参数值。在C#中可以 编写如下所示代码,但是在Java中却做不到。   ...,这一点在Java 8中仍然没有得到改进,正是如此在Java编写代码中才会出现大量Wrapper类(将需要通过方法调用修改引用置于个Wrapper 类中,再Wrapper对象传入方法),这样做法只会让代码变得臃肿...compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。

43741

100道最新Java面试题,常见面试题及答案汇总

Q22:我们能不能通过引用向函数传递参数? 答案:不能,我们只能通过引用将值传递给函数。 Q23:对象在java中如何序列化?...根据参数,将调用适当参数: Q47:如何制作一个Java对象副本? 答案:使用克隆,我们可以创建具有对象实际状态副本。...Q59:可以有两个方法,它们方法名和参数都相同,但返回值类型不同? 答案:相同方法指的是方法名、参数以及返回类型都相同,因此返回类型不同两个方法可以并存。 Q60:以下代码输出是什么?...equals操作表示两个变量是否对同一个对象引用,即堆中内容是否相同 下例中,equals()返回true,而==操作符则返回false: Q73:Java类中定义方法,可否使用其他语言代码实现...答案:可以,main()方法Java应用程序入口方法,代码总是从特定类main方法开始。 Q93:如果我想要保留对象数据以供以后使用,最好做法是什么? 答案:使用序列化。

5.1K21

【C++修行之道】类和对象(五)日期类实现、const成员、取地址及const和取地址操作符重载

这个参数仅仅是为了前缀和后缀区分而存在。 前置运算符语义“先操作,再返回”。 语义上:前置运算符语义先对对象进行递作,然后返回操作后对象。这里关键“操作后对象”。...效率:返回引用避免了不必要创建和返回对象拷贝。在C++中,对象复制可能一个昂贵操作。 链式操作:通过返回引用,可以支持链式操作。...语义上:后置运算符语义返回操作后对象,然后对对象进行递作。后置运算符关键在于返回操作前状态。 安全性:返回拷贝还避免了潜在外部修改,此时得到一个独立值,而不是对原始数据直接引用。...而temp临时对象,因此只能以值方式返回,不能返回引用 1.7 输入输出流重载 // 友元函数声明,声明后可访问私有成员变量 friend ostream& operator<<(ostream&...但这种做法不推荐,因为它破坏了const正确性和对象常量性质,可能导致未定义行为程序错误。通常来说,应该尽量避免这种做法

8910

编写干净C#代码技巧

换句话说,不要在应用程序中使用硬编码字符串值。当应用程序增长时,跟踪这些字符串很困难。此外,这些字符串可以与某种外部引用相关联,如文件名、文件路径、URL等。...宁愿使用Git而不是注释掉代码。 使用方法链接 这是Microsoft在默认生成代码中广泛使用一种常见技术。在这里,每个方法返回一个对象,这些函数将被链接在一起。认识?...考虑另一个例子,下面一个接受Student对象作为参数并检查空对象小函数。如果为空,返回一个带有数据对象,否则返回相同对象。...; 避免太多参数 太多参数总是一场噩梦。如果你倾向于有超过3个参数输入到任何方法,为什么不把它包装到一个请求对象其他东西,然后传递?让我们看一个小例子。...我们添加了一个try-catch块并忽略了错误处理,对?处理此类错误并将其记录到表磁盘一种很好实践。

23230

Null 值及其处理方式

在 Java 中,null 一个关键字,用来表示一个引用类型对象没有被初始化,或是没有引用任何对象状态,这也是类似于 C 做法。...因为你并不知道一个东西到底一个具体对象还是一个 null 值。一个函数说它会返回一个 String 类型对象,这是真的?...注意这里并没有进行强制类型转换,之前不能调用对象方法而现在可以原因编译器认为此时该对象值不可能为 null。这个方式可以解决问题?...所以说,复杂情况完全确定性分析本来就没有办法做,如果做了一部分复杂情形而不做另一部分复杂情形,反而更加怪异,所以只做最简单情况分析更好选择。...包裹 A 类型对象返回了 Some(b) 则结果为 Some(b),如果 optA 调用 getOptionB 返回值有一个为 None,则整个结果为 None。

1.2K40

Java 编程问题:十二、`Optional`

不要将Optional用于字段:举例说明声明Optional类型字段不良做法。 在构造器参数中不要使用Optional:说明在构造器参数使用Optional不良做法。...不要在设置器参数使用Optional:举例说明在设置器参数使用Optional不良做法。 不要在方法参数使用Optional:举例说明在方法参数使用Optional不良做法。...不要使用Optional返回null集合数组:举例说明使用Optional返回/null集合数组不良做法。...Method.invoke()第一个参数表示要调用此特定方法对象实例。如果方法static,那么第一个参数应该是null,因此不需要对象实例。...这次让我们讨论一下方法参数中Optional用法。 在方法参数使用Optional只是另一个用例,可能会导致代码变得不必要复杂

1.3K20

爆肝 50 道 Python 面试题 (上)

当然,更为简便做法使用对象with上下文语法来进行隐式加锁和解锁操作。 方法二:使用元类实现单例模式。...集合中元素必须hashable对象,因此上面的代码在列表元素不是hashable对象时会失效,要解决这个问题可以给函数增加一个参数,该参数可以设计为返回哈希码hashable对象函数。...match方法从字符串起始位置进行正则表达式匹配,返回Match对象None。search方法会扫描整个字符串来找寻匹配模式,同样也是返回Match对象None。...因为Python内置max函数既可以传入可迭代对象找出最大,又可以传入两个多个参数找出最大;最为关键还可以通过命名关键字参数key来指定一个用于元素比较函数,还可以通过default命名关键字参数来指定当可迭代对象为空时返回默认值...__new__方法返回创建好Python对象引用),而__init__方法第一个参数就是这个对象引用),所以在__init__中可以完成对对象初始化操作。

67810

C++奇迹之旅:值和引用本质效率与性能比较

这隐藏了底层通过地址操作原变量ra和rb实现细节。从使用角度看,代码读起来就像直接交换ra和rb,而不是通过复杂地址操作实现。...以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量一份临时拷贝,因此用值作为参数或者返回值类型,效率是非常低下,尤其参数或者返回值类型非常大时...,真的正确?...c引用,但是在main函数中又调用了一次Add函数,这时第一次调用返回引用ret已经指向了一个不存在对象,所以输出结果也是未定义。...但这种行为不可靠,因为它依赖于具体编译器实现细节。在不同编译器环境下,输出可能会完全不同。 正确做法要么返回值,要么返回一个在调用者作用域内仍然存在对象引用

14910

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象属性,并可返回变化后结果,那么这里到底值传递还是引用传递?...实现高质量 equals 方法诀窍包括: (1) 使用==操作符检查”参数是否为这个对象引用”; (2) 使用 instanceof 操作符检查”参数是否为正确类型”; (3) 对于类中关键属性...18、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象属性,并可返回变化后结果,那么这里到底值传递还是引用传递? 值传递。Java 语言方法调用只支持参数值传递。...当一个对象实例作为一个参数被传递到方法中时,参数值就是对该对象引用对象属性可以在被调用过程中被改变,但对对象引用改变不会影响到调用者。...C++和 C#中可以通过传引用输出参数来改变传入参数值。在 C#中可以编写如下所示代码,但是在 Java 中却做不到。

1.1K00

代码重构:函数重构 7 个小技巧

提炼函数使用成本比较高,并且难以进行时…… 当逻辑表达式过于复杂,并且只使用一次时候(如果会被复用,推荐使用 提炼函数 方式) 6:避免修改函数参数 虽然不同编程语言函数参数传递会区分:“按值传递...”、“按引用传递”两种方式(Java 语言传递方式按值传递),这里不就讨论两种传递方式区别,相信大家都知道。...所以我们正确做法应该是使用一个临时变量来处理对参数修改,代码如下: int discount (int inputVal) { int result = inputVal; if (inputVal...,应该了解它输出会如下: arg in triple: 15 x after triple: 5 但是如果函数参数对象,你可能就会觉得困惑了,我们再看一下代码,把函数对象改为对象试试: public...,如果你有更好实现方案(保证输入输出相同前提下),就应该直接替换掉它 记得通过单元测试后,再提交代码(不想被人打的话) 参考文献: 《重构:Refactoring: Improving the Design

56930

c# 误区系列(二)

既然值类型,那么就存在装箱和拆箱过程,那么这个过程有什么不同? 装箱时检查是否为null,如果为null则直接返回null,如果不是null则获取值进行装箱。...很多回答这样子,值变量本身具体值。那么难道引用类型不是指具体地址?...委托一个类,它定义了方法类型,使得可以将方法当作另一个方法参数来进行传递,这种将方法动态地赋给参数做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好可扩展性...所以说为什么值类型在创建时候要清空分配地址,使用时候抹除引用类型有点在于传递,因为引用类型不用复制整个地址块,只需要复制堆上对象指定位置,32位4个字节,648个字节。...void doSomething(Student student) { } doSomething(a); 那么问题student如何赋值过程?将这个a对象赋值给他

61640

Java杂谈之行为参数

让我们把例子再弄得复杂一点儿。这位农民又跑回来说:“要是能区分轻苹果和重苹果就太好了。重苹果一般重量大于150克。”...需要一种比添加很多参数更好方法来应对变化需求。让我们后退一步来看看更高层次抽象。一种可能解决方案选择标准建模:考虑苹果,需要根据Apple某些属性(比如它是绿色?...重量超过150克?)来返回一个boolean值。我们把它称为谓词(即一个返回boolean值函数)。...这就是行为参数化:让方法接受多种行为(战略)作为参数,并在内部使用,来完成不同行为。...做法就类似于在内联“传递代码”,因为通过一个实现了test方法对象来传递布尔表达式。 6、对付啰嗦 人们都不愿意用那些很麻烦功能概念。

38230

写了挺久代码,却还被异常支配?

(); } 当我们需要引用对象 t,但是有可能 t 对象尚未被初始化,所以在使用这个对象之前,我们会对引用进行检查。...异常参数 异常对象与其他 Java 对象一样,都可以通过 new 关键字在 堆上 创建异常对象,因此,这也伴随着存储空间分配和构造器调用。...所有标准异常类都有两个构造器,一个 默认构造器, 一个 接受字符串作为参数构造器 这样子我们能把相关异常信息放入异常对象构造器中: throw new NullPointException(...使API更易于学习和使用,因为它与程序员已经熟悉习惯用法一致 对于用到这些API程序而言,它们可读性会更好,因为它们不会出现很多程序员不熟悉异常 异常 描述 NullPointerException...finally执行前确定 4、finally中最好不要包含return,否则程序会提前退出,返回值不是trycatch中保存返回值 异常使用指南 上面我们复习了一遍Java 中异常,下面一段来自

55710

JAVA:一篇文章理清多态

());//输出1300,Mechanic年薪为13倍月薪   从结果上看,a、b都是Employee类对象变量,然而对a调用getAnnualSalary()返回15*salary,对b调用getAnnualSalary...基于这样想法,甚至有一些人将多态扩展到了更广泛、更复杂情况,比如下面这种,连泛型都算进了多态中: ?   那么,多态真的有那么多种情况?...真的只要方法名相同,而参数或者内部实现方式不同,就要看成多态?不不不,这种说法纯属扯淡,JAVA中多态有且只有一种情况:对象变量多态。...时依然返回12薪?...类对象变量a调用getAnnualSalary()时,编译器会先进行静态绑定,即筛选,从而确定此处方法调用不可能参数版本,但有可能Employee类该方法,也有可能EnginnerMechanic

43330

50道JavaScript详解面试题,你需要了解一下

2、控制台输出是什么? 答案输出为10,因为将对象传递给函数时对象相似,仅传递其值,而不传递对内存位置实际引用。这就是为什么更改仅影响函数范围内参数原因。 3、控制台输出是什么?...该对象位于原型链顶部,当浏览器查找访问属性值时,它将遍历原型链,直到找到该值直到不再遍历所有原型为止。 15、空值合并运算符做什么? 当左侧操作数为null未定义时,它将返回右侧操作数。...但是,可以在JavaScript中通过在未将所有可能参数都传递给函数时返回不同输出来执行重载。 29、return语句在数组forEach循环中做什么?...例如,执行范围(变量,参数等)与子例程一起存储。 36、我们可以使用eventHandlers剪切和复制来防止用户将内容从浏览器复制到剪贴板? 是的,这些事件处理程序Web API一部分。...它提供Web组件封装。 46、使用哪种方法将影子DOM树附加到指定元素,并返回对其ShadowRoot引用? Element.attachShadow()。 47、控制台输出是什么,为什么?

3.5K40

Web 前端面试经历——百度

使用instance检测 在 JavaScript 中,判断一个变量类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用是什么类型对象,它都返回...type: function( obj ) { // 若传入nullundefined,则直接返回这个对象字符串 // 即若传入对象objundefined,则返回"undefined...function类型;高版本已修正,返回object类型 // 若使用typeof检测出obj类型objectfunction,则返回class2type值,否则返回typeof检测类型...可以看到,用是非常巧妙一种做法: 正常继承情况如下: newMyDate()返回实例对象 date由 MyDate构造 原型链回溯: date(MyDate对象)->date....注意⚠️:关于 new.target, MDN中定义:new.target返回一个指向构造方法函数引用。 嗯哼,也就是说,返回构造函数。

63010

【Java】Stream流、方法引用

但循环遍历唯一方式?遍历指每一个元素逐一进行处 理, 而并不是从 第一个到最后一个顺次处理循环 。前者目的,后者方式。... entry 等情况: 根据数组获取流 如果使用不是集合映射而是数组,由于数组对象不可能添加默认方法,所以 Stream 接口中提 供了静态方法 of ,使用很简单...首先是函数式接口: 第一种写法使用Lambda表达式: 但是使用方法引用更好写法: 在这个例子中,下面两种写法等效: Lambda 表达式: n - > Math.abs...首先是函 数式接口: 然后父类 Human 内容: 最后子类 Man 内容,其中使用了Lambda写法: 但是如果使用方法引用来调用父类中 sayHello 方法会更好,例如另一个子类...首 先是一个简单 Person 类: 然后用来创建 Person 对象函数式接口: 要使用这个函数式接口,可以通过Lambda表达式: 但是通过构造器引用,有更好写法

1.3K20

C语言和C++区别和联系

5、缺省参数 缺省参数声明定义函数时为函数参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定参。...· 缺省参数不能同时在函数声明和函数定义中出现,二者只能选其一。 · 缺省值必须常量或者全局变量。 · 缺省参数必须通过值参常参传递。...我们看到对a修改,指针p做法*p = 20;即进行解引用后替换值。 再来看看引用修改: 我们看到修改a方法也是一样,也是解引用。...只是我们在调用时候有所不同:调用p时需要*p解引用,b则直接使用就可以。由此我们 推断出:引用在直接使用指针解引用。p直接使用则是它自己地址。...这样我们也了解了,我们给引用开辟这块内存根本访问不到。如果直接用就直接解引用了。即使打印&b,输出也是a地址。

1.2K10

C语言和C++区别和联系

5、缺省参数 缺省参数声明定义函数时为函数参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定参。...· 缺省参数不能同时在函数声明和函数定义中出现,二者只能选其一。 · 缺省值必须常量或者全局变量。 · 缺省参数必须通过值参常参传递。...我们看到对a修改,指针p做法*p = 20;即进行解引用后替换值。 再来看看引用修改: 我们看到修改a方法也是一样,也是解引用。...只是我们在调用时候有所不同:调用p时需要*p解引用,b则直接使用就可以。由此我们 推断出:引用在直接使用指针解引用。p直接使用则是它自己地址。...这样我们也了解了,我们给引用开辟这块内存根本访问不到。如果直接用就直接解引用了。即使打印&b,输出也是a地址。

2.5K30
领券