实例化

Fragment 中 commit commit already called

匿名 (未验证) 提交于 2019-12-03 00:29:01
每一个实例化后的 FragmentTransaction 的事物只能被提交一次,我开始时是定义了一个全局的 FragmentTransaction,然后就只在 onCreate() 方法中实例化了一次,但是我设置点击事件切换 fragment 时,会导致二次 commit,所以会报错。 @Override public void onClick ( View view ) { switch ( view . getId ()) { case R . id . btn_first : mTransaction . hide ( secondFragment ). hide ( thirdFragment ). show ( firstFragment ). commit (); break ; case R . id . btn_second : mTransaction . hide ( firstFragment ). hide ( thirdFragment ). show ( secondFragment ). commit (); break ; case R . id . btn_third : mTransaction . hide ( firstFragment ). hide ( secondFragment ). show ( thirdFragment ).

C++学习_模板

匿名 (未验证) 提交于 2019-12-03 00:22:01
问题描述:怎样实现一个通用的加法函数? 函数重载 函数重载可以手动针对不同的类型,编写相应的函数。但是它有下面这些缺陷: 需要手动添加针对新类型的处理函数,比较麻烦 代码复用率不高,像这个加法函数,仅仅数据类型不同,但是每一种类型都要编写类似的代码 不能解决只有返回值不同的情况 维护起来不方便,试想如果针对每种类型的函数代码都只有数据类型不同,那么这种方法出现问题需要修改,就得修改每一种类型的函数 公共基类 创建一个公共基类派生出不同的函数来处理各种数据类型。缺陷: 失去了类型检查的优点 由于处在继承体系中,代码维护起来更加困难。 宏函数 由于宏可以忽略类型,所以可以编写宏函数来处理类型不同的情况。 缺陷:正因为宏没有类型检查,所以安全性不高,并且由于宏的特性,编写复杂的宏函数很容易出错。 总结上面的三种方法,每一种方法都有着难以忽略的缺陷,正因如此,才有了 模板 。 上面的那种问题,其实属于一种编程的范畴内,那就是 泛型编程 。 泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段之一。而模板是C++泛型编程的基础。 模板又分为 函数模板 和 类模板 。 1.函数模板的概念 什么是函数模板呢? 可以暂时理解为函数模板就是一个通用函数,它所用到的数据类型(可以是返回值,参数,局部变量等)可以不具体指定,而是用一个指定的标识符来替代任意一种不确定的类型

单例模式

匿名 (未验证) 提交于 2019-12-03 00:19:01
单例模式是比较常见的设计模式。 是一种常用的软件设计模式,在它的核心结构中值包含一个被称为单例的特殊类。一个类只有一个实例,即一个类只有一个对象实例。 单例模式的优点   我们从单例模式的定义和实现,可以知道单例模式具有以下几个优点: 在内存中只有一个对象,节省内存空间; 避免频繁的创建销毁对象,可以提高性能; 避免对共享资源的多重占用,简化访问; 为整个系统提供一个全局访问点。 有状态的工具类对象; 频繁访问数据库或文件的对象; 单例模式的使用场景   由于单例模式具有以上优点,并且形式上比较简单,所以是日常开发中用的比较多的一种设计模式, 其核心在于为整个系统提供一个唯一的实例, 其应用场景包括但不仅限于以下几种: 有状态的工具类对象; 频繁访问数据库或文件的对象; 1.第一种(懒汉式): public class Singleton(){ public static Singleton sInstance = null; //构造函数声明为private,是阻止外部实例化这个类。因为默认无参数构造方法是public的。 private Singleton(){ } public static Singleton getInstance(){ if (sInstance == null ) { sInstance = new Singleton(); } return

js报错 Cannot read property 'getAttribute' of null

匿名 (未验证) 提交于 2019-12-03 00:11:01
页面echarts.js报错:Uncaught TypeError: Cannot read property 'getAttribute' of null 根据报错信息查找原因发现是因为 实例化echarts的元素不存在,查看官方文档发现: // 基于准备好的dom,初始化echarts实例 var myChart = echarts . init ( document . getElementById ( 'main' )); ,也就是只有 页面存在的HTML元素 才可以去初始化。 如果不知道页面是否存在此HTML元素,那么在 实例化echarts前 去打印一下看看 console . log ( document . getElementById ( 'main' )) 来源:博客园 作者: dongsir董先生 链接:https://www.cnblogs.com/sirdong/p/11591811.html

设计模式-单例模式学习笔记

匿名 (未验证) 提交于 2019-12-03 00:08:02
DCL、Holder(静态内部类)和饿汉式单例都可以通过反射或者序列化破坏。 直接用枚举单例就完事了。 场景:多线程情况下操作相同对象应该是同一个对象。例如文件。 在实例化过程中,所有的对象只实例化一次。 需要实现一个实例化的过程并且向用户提供一个返回实例对象的方法。 线程安全性。 性能。 懒加载。 饿汉式 在加载时就产生实例化对象存放在堆中,后续使用时只会取到同一个实例化对象,故判断其线程安全。(Ref:JVM ClassLoader)。 不存在延迟加载的情况,长时间不使用仍然会保存在堆内存中,若单例数据较大的时候会产生内存浪费,甚至可能会产生内存溢出影响性能。 因此比较适合少量数据的单例模式。 public class HungrySingleton { private byte[] data=new byte[1024]; private static HungrySingleton instatance=new HungrySingleton(); private HungrySingleton(){ } public static HungrySingleton getInstance(){ return instatance; } } 懒汉式 为了克服单例对象数据较大且还未被使用时造成的内存浪费,将饿汉式做出一定改变,在首次使用时才进行加载。 懒汉式并非线程安全的

你真的会用单例模式?

匿名 (未验证) 提交于 2019-12-02 23:57:01
单例模式可以说只要是一个合格的开发都会写,但是如果要深究,小小的单例模式可以牵扯到很多东西,比如:多线程是否安全?是否懒加载?性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式? 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象。有点像 Java 的静态变量,但是单例模式要优于静态变量: 静态变量在程序启动的时候 JVM 就会进行加载,如果不使用,会造成大量的资源浪费; 单例模式能够实现懒加载,能够在使用实例的时候才去创建实例。 开发工具类库中的很多工具类都应用了单例模式,比例线程池、缓存、日志对象等,它们都只需要创建一个对象,如果创建多份实例,可能会带来不可预知的问题,比如资源的浪费、结果处理不一致等问题。 静态化实例对象; 私有化构造方法,禁止通过构造方法创建实例; 提供一个公共的静态方法,用来返回唯一实例。 只有一个对象,内存开支少、性能好; 避免对资源的多重占用; 在系统设置全局访问点,优化和共享资源访问。 饿汉模式 懒汉模式 双重检查锁模式 静态内部类单例模式 枚举类实现单例模式 在定义静态属性时,直接实例化了对象 public class HungryMode { /** * 利用静态变量来存储唯一实例 */ private static final HungryMode instance = new HungryMode(); /** *

设计模式之单例设计模式

匿名 (未验证) 提交于 2019-12-02 23:52:01
所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例, 并且该类只提供一个取得其对象实例的方法(静态方法)。 比如 Hibernate 的 SessionFactory,它充当数据存储源的代理,并负责创建 Session 对象。SessionFactory 并不是轻量级的,一般情况下,一个项目通常只需要一个 SessionFactory 就够,这是就会使用到单例模式。 1)饿汉式(静态变量) - 在确定会使用到该实例时,可推荐使用 饿汉式(静态代码块) 2)懒汉式(线程不安全) - 不推荐 懒汉式(线程安全,同步方法) - 效率较低,不推荐 懒汉式(线程不安全,同步代码块) - 不推荐 3)双重检查 - 推荐使用 4)静态内部类 - 推荐使用 5)枚举 - 推荐使用 //饿汉式(静态变量) class Singleton{ //1.构造器私有化(防止new) private Singleton(){} //2.本类内部创建对象实例 private static final Singleton singleton = new Singleton(); //3.提供公有静态方法,返回实例对象 public static Singleton getInstance(){ return singleton; } } 优缺点: 1)优点:写法比较简单

为什么要让工具类不能被实例化

匿名 (未验证) 提交于 2019-12-02 23:43:01
首先我们知道,工具类是 可以实例化 的,只是没有必要去实例化。 工具类是为了提供一些通用类的某一非业务领域内的公共方法,不需要配套的成员变量,仅仅是作为工具方法被使用。所以将它做成静态方法最合适,不需要实例化,能够获取到方法的定义并调用就行。 如果要实例化一个工具类,就需要一定的内存空间,工具类提供的是 静态方法 ,通过类就能调用,所以 不必浪费内存 去实例化工具类对象。 那么如何让工具类不能被实例化呢? 让一个工具类不能被实例化的方法:使用私有构造器 public class A { private classA(){} } 由此想到 让一个类不能被实例化应该怎么做? 使用私有构造器,在构造器中添加限制; 在使用私有构造器的基础下,再在构造方法中 返回一个异常 ,因为虽然外部类无法实例化该类,但是内部类可以实例化该类。 如果只是通过私有化构造器,那么通过反射的方式,还是可以实例化该类。 必须在私有构造器中添加一个异常,这样,当执行构造方法的时候,就会抛出异常,从而停止实例化。 具体实现参考: https://www.cnblogs.com/ttylinux/archive/2017/03/05/6504822.html 文章来源: https://blog.csdn.net/qq_42651201/article/details/92663283

.NET 委托(Delegate、Action、Func)

匿名 (未验证) 提交于 2019-12-02 23:43:01
Delegate protected delegate int ClassDelegate(int x, int y);//定义委托类型及参数 static void Main(string[] args) { ClassDelegate dele = new ClassDelegate(Add);//实例化一个委托 Console.WriteLine(dele(1, 2));//调用委托 Console.ReadKey(); } static int Add(int a, int b) { return a + b; } Action,可以传入参数,没有返回值的委托 方法1,调用方法      static void Main(string[] args) { Action<int, int> ac = new Action<int, int>(ShowAddResult);//实例化一个委托 ac(1, 2);//调用委托 Console.ReadKey(); } static void ShowAddResult(int a, int b) { Console.WriteLine(a + b); } 方法2,使用lambda表达式 static void Main(string[] args) { Action<int, int> ac = ((p, q) =>

SpringBoot(16)―@ConditionalOnBean与@ConditionalOnClass

匿名 (未验证) 提交于 2019-12-02 23:43:01
上一篇讲的 @Conditional 可以通过条件控制是否注入Bean,这篇讲下有关Bean其它几个常用的注解使用方式 @ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean @ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化当前Bean @ConditionalOnClass // 当给定的类名在类路径上存在,则实例化当前Bean @ConditionalOnMissingClass // 当给定的类名在类路径上不存在,则实例化当前Bean 下面我通过案例深入讲下 @ConditionalOnBean 注解,这个理解其它也就理解了。 需求场景 比如下面一种场景,我在实例化People对象的时候,需要注入一个City对象。这个时候问题来了,如果city没有实例化,那么下面就会报空指针或者直接报错。 所以这里需求很简单,就是当前city存在则实例化people,如果不存在则不实例化people,这个时候 @ConditionalOnBean 的作用来了。 @Bean public People people(City city) { //这里如果city实体没有成功注入 这里就会报空指针 city.setCityName("千岛湖"); city.setCityCode(301701); return