首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    方法参数过多怎么办

    我们在编程或阅读前人的代码时,经常会看到多个参数的方法,有的甚至达到二十个,看得人眼花缭乱,不便于阅读和维护,而且参数很容易混淆,如两个参数类型同为short型,传递时相互颠倒,编译期间内不会提示报错,...个之内,将大大提高记忆效率,因此建议将方法参数控制在7个以内,在4个以内最好,但是需要传递的方法参数就那么多,该怎么办?...一种方法是将一个方法拆分成多个方法,每个方法传递少量参数,然而有时候这些参数需要同时被使用,我们也可以使用参数对象封装这些参数,如对上面方法进行改造: class UserInfo { private...,实际上要使用这个方法,他还得进入方法内部查看实际使用了哪些参数,这个方法反而显得不够友好,如果直接改写为: public void queryUserRelatedInfo(String name,...随着用户信息的扩展,有的人会偷懒往userInfo对象中添加新的属性,如fatherName,motherName,这些属性缺乏紧密的联系,对象日渐庞大,整个就是一锅大杂烩,在可读性上反而不如直接传递基本类型参数的方法

    2.5K91

    CA1005:避免泛型类型的参数过多

    值 规则 ID CA1005 类别 设计 修复是中断修复还是非中断修复 重大 原因 外部可见的泛型类型具有两个以上的类型参数。 默认情况下,此规则仅查看外部可见的类型,但这是可配置的。...规则说明 泛型类型包含的类型参数越多,越难以知道并记住每个类型参数各代表什么。...它通常有一个类型参数,如在 List 中,而在某些情况下有两个类型参数,如在 Dictionary 中。...如何解决冲突 若要解决此规则的冲突,请将设计更改为使用不超过两个类型参数。 何时禁止显示警告 除非设计确实需要两个以上的类型参数,否则不要禁止显示此规则的警告。...抑制警告 可以通过多种方式来禁止显示代码分析警告,包括禁用项目的规则、使用预处理器指令为特定代码行禁用该规则或应用 SuppressMessageAttribute 特性。

    1.1K30

    避免在Swift中使用单例

    本周,让我们来看看使用单例的问题到底是什么,并探讨一些可以用来避免这些问题的技巧。让我们直接开始吧! 为什么单例如此受欢迎? 首先,让我们先问一下,为什么单例一开始就这么受欢迎。...那么,单例通常会造成哪些具体问题,为什么要避免它们?我倾向于避免使用单例的三个主要原因是: 它们是全局可变共享状态。...一般来说,将各种单例和管理器重构为清晰分离的服务,是在应用程序的核心对象之间建立更清晰关系的好方法。 服务 作为一个例子,让我们仔细看看LogOutService可以如何实现。...然后,我们可以开始用服务和其他类型的API逐一替换我们的单例,例如使用 "使用Swift协议替历史遗留代码 "的技术。...结论 单例并不普遍是坏事,但在许多情况下,它们会带来一系列的问题,这些问题可以通过在对象之间建立更明确的关系和使用依赖注入来避免。

    50830

    当构造方法参数过多时使用builder模式

    传统上,程序员使用了可伸缩(telescoping constructor)构造方法模式,在这种模式中,只提供了一个只所需参数的构造函数,另一个只有一个可选参数,第三个有两个可选参数,等等,最终在构造函数中包含所有可选参数...由于构造方法在多次调用中被分割,所以在构造过程中 JavaBean 可能处于不一致的状态。该类没有通过检查构造参数参数的有效性来执行一致性的选项。...在build方法调用的构造方法中检查包含多个参数的不变性。为了确保这些不变性不受攻击,在从 builder 复制参数后对对象属性进行检查(条目 50)。...,builder 可以有多个可变参数,因为每个参数都是在它自己的方法中指定的。...而且,builder 模式比伸缩构造方法模式更冗长,因此只有在有足够的参数时才值得使用它,比如四个或更多。但是请记住,如果希望在将来添加更多的参数。

    97730

    Android开发笔记(一百七十九)避免方法数过多的问题

    原来Android的每个App代码都放在一个dex文件中,系统会把内部方法的索引保存在一个链表结构里,由于这个链表的长度变量是short类型(short类型的数字占两个字节共16位),使得链表的最大长度不能超过...65536(2的16次方),因此App方法数超过65536的话,链表索引溢出就报错了。...为了解决方法数过多的问题,Android推出了名叫MultiDex的解决方案,也就是在打包时把应用分成多个dex文件,每个dex的方法数量均不超过65536个,由此规避了方法数过多的限制。...androidx.multidex:multidex:2.0.1' 还要在defaultConfig节点下添加以下配置,表示开启多个dex功能: multiDexEnabled true // 避免方法数最多...节点的android:name属性设置自定义的Application,示例如下: android:name=".MainApplication" 然后重新编译App工程,之后运行的App就不再出现方法数过多的问题了

    39720

    避免在移动端页面中使用100vh

    100vh在移动浏览器中以一种微妙但基本的方式被破坏,使其几乎无用。最好避免使用100vh,而应该通过javascript设置高度的方式来获得完整的视口体验。...如下所示: 一个更好的解决方法:window.innerHeight 解决该问题的一种方法是依靠JavaScript而不是CSS。...在Wordsheet.io上学习时,你可以看到这一点。例如,尝试在移动浏览器上打开wordsheet.io/demo/V3Y。无论地址栏是否可见,屏幕都将是视口的高度。...此外,在页面首次加载时将高度固定为适当的大小,可以防止在使用该网站的过程中地址栏隐藏,从而带来尴尬的屏幕调整大小体验。...遗憾的是,在不依赖JavaScript的情况下,仍然没有一种简单的方法来使元素占据整个视口高度。100vh是如此接近伟大(greatness),但考虑到它在移动设备上的局限性,最好避免使用它。

    1.6K30

    在LINQ to SQL中使用Translate方法以及修改查询用SQL

    老赵在最近的项目中使用了LINQ to SQL作为数据层的基础,在LINQ to SQL开发方面积累了一定经验,也总结出了一些官方文档上并未提及的有用做法,特此和大家分享。   ...在调用Translate方法后为什么要直接调用ToList方法:因为GetItemsForListing方法的返回值是List,这是原因之一。...而这次扩展的关键在于新的ExecuteQuery方法,它接受一个IQueryable类型的对象作为参数,返回一个范型的List。...数据库事务会带来锁,锁会降低数据库并发性,在某些“不巧”的情况下还会造成死锁。对于一些查询语句,我们完全可以显式为SELECT语句添加WITH (NOLOCK)选项来避免发出共享锁。...因此我们现在扩展刚才的ExecuteQuery方法,使它接受一个withNoLock参数,表明是否需要为SELECT添加WITH (NOLOCK)选项。

    4.9K50

    为什么要避免在 Go 中使用 ioutil.ReadAll?

    原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll? ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。...[002-ioutil-readall-github.png] 在 GitHub 上搜索 ioutil.ReadAll,类型选择 Code,语言选择 Go,一共得到了 637307 条结果。...方法; 同样的,如果目标实现了 ReaderFrom 方法,则直接调用 ReaderFrom 方法; 如果 buf 为空,则创建 32KB 的 buf; 最后就是循环 Read 和 Write; 对比之后就会发现...它包装一个 io.Reader,返回一个 io.ReadCloser,相应的 Close 方法啥也不做,只是返回 nil。...主要原因是在小数据量的情况下,这个函数并没有什么问题,但当数据量大时,它就变成了一颗定时炸弹。有可能会影响程序的性能,甚至会导致程序崩溃。

    2.8K30

    Swift: 为什么要避免在结构体中使用闭包?

    好吧,如果这使我们工作变得容易,那为什么我要避免在Swift结构中使用闭包呢? 原因是:内存泄漏和意外行为。 结构内存泄漏,可能吗? 结构是值类型,并且不可能发生内存泄漏。那句话是真的吗?...通常,在引用类型中会发生内存泄漏。在大多数情况下,它以循环引用(retain cycles)的形式出现。 因此,如果引用类型是导致内存泄漏的原因,那么我们可以将值类型用于所有情况。...结构体中产生循环引用的罪魁祸首——闭包(Closures) 当您在结构中使用闭包时,闭包的行为就像一个引用类型,问题就从那里开始。闭包需要引用外部环境,以便在执行闭包主体时可以修改外部变量。...直接的解决方案是,避免在值类型中使用闭包。如果要使用它们,则应格外小心,否则可能会导致意外结果。关于保留周期,打破它们的唯一方法是将变量myCar和myNewCar手动设置为nil。...听起来并不理想,但是没有其他方法。

    1.8K20
    领券