Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 条目2:当构造方法参数过多时使用builder模式 静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景.请考虑一个代表包装食品上的营养成分标签的例子.这…
静态工厂和构造具有共同的局限性:我们不能扩展到大量的非常好的可选参数. 1.对于多个可选參数的构造器.我们都习惯採用重叠构造器模式.比方一个參数的构造器调用2个參数的构造器.     2个參数的构造器调用3个參数的,以此类推. public class User{     private int id.     private String name.     private String age.     private String sex.          public User(int…
静态工厂和构造方法都有一个限制:它们不能很好地扩展到很多可选参数的情景.请考虑一个代表包装食品上的营养成分标签的例子.这些标签有几个必需的属性——每次建议的摄入量,每罐的份量和每份卡路里 ,以及超过 20 个可选的属性——总脂肪.饱和脂肪.反式脂肪.胆固醇.钠等等.大多数产品都有非零值,只有少数几个可选属性. 应该为这样的类编写什么样的构造方法或静态工厂?传统上,程序员使用了可伸缩(telescoping constructor)构造方法模式,在这种模式中,只提供了一个只所需参数的构造函数,另一…
前言 <Effective Java>中文第三版,是一本关于Java基础的书,这本书不止一次有人推荐我看.其中包括我很喜欢的博客园博主五月的仓颉,他曾在自己的博文<给Java程序猿们推荐一些值得一看的好书>中也推荐过.加深自己的记忆,同时向优秀的人看齐,决定在看完每一章之后,都写一篇随笔.如果有写的不对的地方.表述的不清楚的地方.或者其他建议,希望您能够留言指正,谢谢. <Effective Java>中文第三版在线阅读链接:https://github.com/sjs…
在框架开发,模块化开发等场合,我们可能有一种需求,那就是在PHP运行时动态实例化对象. 什么是动态实例化对象呢?我们先来看一下PHP有一种变量函数(可变函数)的概念,例如如下代码: function foo() { echo 'This is the foo function'; } $bar = 'foo'; $bar(); 运行上述代码将会输出“This is the foo function”.具体请参考PHP手册:可变函数.当然,如果需要动态调用的话,那么就使用call_user_fun…
前言 在ASP.NET Core中引入了DI,并且通过构造函数注入参数,控制器中会大量使用DI注入各种的配置参数,如果配置注入的参数比较多,而且各个控制器需要的配置参数都基本一样的话,那么不断重复的复制黏贴代码提供相应的构造函数,效率低效也,因此使用T4模板生成控制器的构造函数 ,这也得益于C#对分部类(partial)的支持. T4模板生成控制器构造函数 图中CtrlTemplate.tt为模板文件,CtrlNames.txt为需要使用T4生成代码的控制器名称文件,CtrlTemplate.c…
在C++中, 构造函数,拷贝构造函数,析构函数和赋值函数(赋值运算符重载)是最基本不过的需要掌握的知识.在effective C++中说过这么一点:拷贝构造函数的参数必须是引用类型的.但是为什么呢? 拷贝构造函数的参数必须是引用类型的 如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数.因此拷贝构造函数的参数必须是…
[转]为什么复制构造函数的参数需要加const和引用 一.引言 1.0在解答这个问题之前,我们先跑个小程序,看下调用关系. #include <iostream> using namespace std; class CExample { public: CExample(int x) :m_nTest(x) //带参数构造函数 { cout<< "constructor with argument."<<endl; } CExample(const…
Java中构造函数传参数在基本数据类型和引用类型的区别 如果构造函数中穿的参数为基本数据类型,如果在函数中没有返回值,在调用的时候不会发生改变:而如果是引用类型,改变的是存储的位置,所有不管有没有返回值在调用时都会发生改变. public class Num{ /* 参数为引用类型的时候 */ public static void main(String[] args){ int x=1; int y=2; change(x,y); Systm.out.println(arr[3]);//666…
<?php class test_construct_avg { function __construct($input = '') { $this->input = $input; } function w() { var_dump($this); var_dump($this->input); } function change_construct_avg($new_input) { $this->input = $new_input; } } $w = new test_co…
在对Java代码进行优化的时候,想方设法的要提高整体的效率,使用JProfiler看代码的时间占比,然后,看看哪些部分是可以优化的,减少运行时间的.下面有这么几个方向. 1. 能使用构造函数一步到位的,就尽量使用构造函数,而不是使用一个个setter函数 2. 能使用数组的,就使用数组.替代list,数组是真的快. 3. for循环的时候,使用for i循环针对list接口的集合,不使用for each 循环.for i循环的时候,把length的值提到for循环之外. 4. 有些变量能提出来的…
1. @Data public class Student { //体检用 private String name; private int age; private int height; private int sex; //录取用 private String schoolName; private String profession; private int gradeNo; //分班用 private String idCard; private String stuNo; priva…
前言 作为一个前端程序员,难免会有一些专属自己的小扩展,没必要每一个都发到Chrome应用商店去,虽然可以勾选"开发者模式"来运行本地插件,但是每次启动都会有一个烦人的"请停用以开发者模式运行的扩展程序"提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你的操作,真是苦不堪言!所以总想着如何把它给去掉. 解决方法 网上搜索了一圈,发现主要有3种方法:组策略法,运行批处理法,直接改dll文件…
在新建对象时,若需要对大量可选参数进行赋值,最常见的做法是JavaBeans模式,即调用一个无参构造方法创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数.代码示例如下: public class Complex { private int size; private int color; private int range = 0; private int num = 0; public Complex(int size, int color) { this.siz…
chrome用户在安装了一些第三方的chrome插件后,每次打开浏览器的时候都会出现“请停用以开发者模式运行的扩展程序”的提示,只有每次点击取消之后才能正常使用扩展.如下图所示 那么有没有什么方法可以永久性的解决chrome“请停用以开发者模式运行的扩展程序”的提示的方法呢?今天我们就为大家收集整理的两种方法. 一.通过组策略添加扩展程序白名单的方式屏蔽了这种提示.(注意:此方法仅适用windows系统) 1. 首先下载Chrome组策略管理模板 :下载地址:http://chromecj.co…
问题,面对这种一个构造器具备多个参数的问题,现有的做法是使用重叠构造器的方式,该方式存在的问题: public class NutritionFacts { private final int servingSize; // (mL) required private final int servings; // (per container) required private final int calories; // optional private final int fat; // (…
yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景:考虑使用一个类表示食品包装袋上的营养成分标签.这些标签只有几个是必须的--每份的含量.每罐的含量.每份的卡路里,除了这几个必选的,还有超过 20 个可选的标签--总脂肪量.饱和脂肪量等等.对于这些可选的标签,大部分产品一般都只有几个标签的有值,不是每一个标签都用到. (telescoping co…
1.前言 每次启动都会有一个烦人的“请停用以开发者模式运行的扩展程序”提示,这个提示有多烦人,接触过的人都知道,启动的时候它不立即提示,等过了几秒钟等你打开某个网页开始执行某些操作时它突然弹出来干扰你的操作,真是苦不堪言!所以总想着如何把它给去掉. 2.解决方法:修改dll文件法 打开Chrome安装目录,找到chrome.dll文件,用x64dbg打开, 双击x96dbg.exe,然后选择x64dbg(如果打不开,换x32dbg打开): 然后连续多次点击运行到用户代码按钮,直至窗口标题处的模块…
最新解决Chrome(版本76.0.3809.100) “请停用以开发者模式运行的扩展程序”的方法 最近在远景论坛上发现了最新的解决Chrome浏览器提示:请停用以开发者模式运行的扩展程序的问题.该方法只需要添加一条注册表即可,简单快捷,亲测可用.而在网上搜索的方法基本都失效了, 当然涉及到注册表问题,则只适用于Windows系统.以下是使用方法. 环境 系统环境:Windows 10 版本 1903(OS 内部版本 18362.239)Google Chrome:版本 76.0.3809.10…
PyCharm参数.快捷键.调试模式 PyCharm设置参数 在运行Python脚本时,会经常遇到需要传入额外的参数来运行脚本. 例如下脚本1: #!/usr/bin/env python2 # *.* coding:utf-8 *.* import sys print(sys.argv[0]) print(sys.argv[1]) 运行结果: F:/PycharmProjects/untitled2/001.py Traceback (most recent call last): File…
安装了python selenium,运行下面代码: 1 from selenium import webdriver 2 3 browser = webdriver.Chrome() 4 browser.get('http://www.baidu.com/') # 启动Chrome浏览器打开百度网址 报错: 1 Traceback (most recent call last): 2 File "I:/python/c ip/go.py", line 4, in <module…
构造函数是一种特殊的成员函数,在创建对象时自动执行,主要用来进行初始化工作,例如对 private 属性的成员变量赋值. 对成员变量的初始化,除了在构造函数的函数体中一一赋值,还可以采用参数初始化表.请看下面的代码: class Student{ private: char *name; int age; float score; public: Student(char *, int, float); void say(); }; //在构造函数中采用参数初始化表 Student::Stude…
几乎所有的Qt类的构造函数都会有一个parent参数.这个参数通常是QObject* 或者是 QWidget* 类型的.很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题.于是,稍微偷懒一下,就会不自觉的忽略了这个参数.那么,这个参数到底是干什么用的呢?   其实,这个参数有很多用处.就像它的名字一样,这个参数指定了组件的父组件.对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任务栏上一般是没有对话框的位置的.怎么指定这个对话框不是顶层容器呢?有父组件的组件不就…
在我的上一篇随笔里面分析了jQuery的构造函数,jQuery对象中有一个原型方法init才是是真正的构造函数,通过init的原型对象跟jQuery的原型对象保持引用关系使得init的实例可以正常调用jQuery的原型方法,就好像是jQuery的实例一样.下面就来看看init这个幕后的构造函数是怎么写的: init: function( selector, context, rootjQuery ) { ... } 可以看到这个方法接受3个参数,其前两个参数是jQuery方法传递过来的 var…
分析完了字符串情况剩下的就不多了. 5.参数selector是函数 这个就是很容易想到了,首先说一下dom加载.我们通常在head里面写脚本的时候需要等待文档加载在进行处理,js是这么写的 window.onload=function(){ your code... } 但是这样是需要等待所有资源都加载完毕才会执行,如果页面有很多图片的话就会加载的很慢.dom2级呢有一个加载完成事件DOMContentLoad比较好用,这个事件是会在html文档结构加载完毕触发.比如说这个页面有10个img元素…
接着上一篇随笔讨论. 如果selector是其他字符串情况就比较多了比较复杂了 // Handle HTML strings if ( typeof selector === "string" ) {...} 开始分不同的情况处理 // Are we dealing with HTML string or an ID? if ( selector.charAt(0) === "<" && selector.charAt( selector.le…
参考自:https://blog.csdn.net/sunSHINEEzy/article/details/78122485 构造函数之默认构造函数(调用的构造函数不用传递参数) 两种实例化方式都是默认构造函数 构造函数之初始化列表 红字部分即为初始化列表:一个引号,多个参数用逗号隔开,赋值用()   初始化列表特性: 其先于构造函数执行 其只能用于构造函数 其可以同时初始化多个数据成员 [注意]初始化列表的功用:对于类中的静态常量,不能用构造函数来初始化,必须使用初始化列表的方式 拷贝构造函数…
在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或float表示一个未知数是比较麻烦的(尤其是查询数据库查询到的数据),假设 class Program { static void Main(string[] args) { Product p = new Product(); Console.WriteLine(p.Price); } } class…
原文:https://blog.csdn.net/junmail/article/details/83249186 构造函数的执行顺序: 子类静态变量>子类静态构造函数>子类非静态变量>父类静态变量>父类静态构造函数>父类非静态变量>父类无参构造函数>子类无参构造函数;…
直接切入主题 有时候同一个项目下我们可能会使用多个窗体,窗体间方法互相调用也不可避免,好了,使用无参无返回值的方法,开始上图 1.新建一个winform项目Form1,并再添加一个窗体Form2:拖入button和textbox,如下 2.先编辑Form2,定义属性存放无参无返回值的方法,重载Form2的构造函数,处理相关方法 public Form2(List<Action> a) //public List<Action> Form2m(params Action[] a) {…