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

绑定子类基类,反模式?

今天要说主题正是基于LayerSupertype,并结合了技术而实现,同样,它还有一个重要约定:类型参数必须是最终子类。...基于这个基类代码重用,使得子类代码非常简单。这里和普通继承、普通不同点在于父类在运行时绑定了具体子类类型。 设计原理     为什么要这样设计?基类为什么不直接使用非基类呢?...再举一个例子:由于基类运行时绑定了不同子类,使得它本身静态字段绑定到最终子类。...要解决这个问题,我们需要把需要进行再继承类也提取为一个基类和一个继承此基类子类。...* 要不就是所有的类都直接写成一个类+一个空子类方法。(这个设计丑陋吗?)

97150
您找到你想要的搜索结果了吗?
是的
没有找到

当类相关时,如何在两个类之间创建类似子类关系呢

那么问题来了,当类相关时,如何在两个类之间创建类似子类关系呢?例如如何让Box 和Box变得与Box有关呢?...为了搞懂这个问题,我们先来了解一下同一类对象是如何实现子类型化吧。...小结:可以通过继承类或者实现接口来对其进行子类型化。 搞懂了子类型化问题,我们回到“如何在两个类之间创建类似子类关系“问题。...类或者接口并不会仅仅因为它们类型之间有关系而变得相关,如果要达到相关,我们可以使用通配符来创建类或接口之间关系。...extends Number> 因为Integer是Number子类型,numberBox是Number对象子类,所以在intBox和numberBox之间存在关系。

2.8K20

使用通配符和:完成父子类关系List对象类型匹配

和通配符 使用和通配符都可以让一个方法所表示算法逻辑适应多种类型。...可以通过通配符或者方法实现。 通配符实现 使用List这样形参,就可以接收集合项为Animal子类任意List。...其他Animal子类List都是可以。...方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应具体Animal子类型是一致,那么就需要用到了: public ...参数也可以是多个,而且之间存在关系。 小结 以上通过一个不太实际案例说明了使用和通配符来解决List集合之间“匹配”问题。这也是它们主要用途之一。

1.5K70

使用通配符和:完成父子类关系List对象类型匹配

和通配符 使用和通配符都可以让一个方法所表示算法逻辑适应多种类型。...可以通过通配符或者方法实现。 通配符实现 使用List这样形参,就可以接收集合项为Animal子类任意List。...其他Animal子类List都是可以。...方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应具体Animal子类型是一致,那么就需要用到了: public ...参数也可以是多个,而且之间存在关系。 小结 以上通过一个不太实际案例说明了使用和通配符来解决List集合之间“匹配”问题。这也是它们主要用途之一。 (本文使用Atom编写)

2.4K00

使用委托,构筑最快通用属性访问

最近做一个父类属性向子类属性赋值小程序,用了下AutoMapper组件,感觉不错,想探究下它原理,自己动手做一个例子试试看。...实现这个功能,第一反应使用反射遍历对象属性然后获取父类对象属性值,接着设置给子类对象同名属性。但一想到反射效率,就又打算才用另外方式来实现。...,改写成方法了: 首先,定义一个获取属性值和设置属性值委托: public delegate T GetPropertyValue(); public delegate void SetPropertyValue...CreateGetPropertyValueDelegate(info, "CID"); var r2 = get2();//100 经测试,结果正常,这样,通用最快属性访问就有了...obj 有效,除非这是静态属性,它并不能作为一个通用类型属性访问,所以将它缓存意义不大,但可以作为优化属性访问一个手段。

87890

java基础学习_集合类02_List子类、增强for循环、静态导入、可变参数_day16总结

: 1:List子类(掌握)   (1)List子类特点   (2)ArrayList类   (3)Vector类   (4)LinkedList类   (5)案例 2:(掌握)   ...(1)概述   (2)格式   (3)好处   (4)前世今生   (5)我们在哪里使用呢?...B:类       把定义在类上         格式:public class 类名 注意:类型必须是引用数据类型。...C:方法       把定义在方法上         格式:public 返回类型 方法名(类型 名) 注意:方法能接收任意类型参数         ...D:接口       把定义在接口上         格式:public interface 接口名 注意:把定义在接口上,该接口实现类是实现那一刻就知道类型

1K10

从C++转向Rust:两大主题值得关注!

只是因为避免语言过于繁冗,Rust允许开发在一些情况下省略该标记(Lifetime Elision); 因为BorrowChecker工作在编译期,所以生命周期标记合并在系统中,具体实现为参数中一项...子类化Subtyping 为了加快思考,人脑会将一些常用推导变成直觉,不自觉地忽略底层逻辑细节,子类化(Subtyping)就是其中一个例子。...在Rust中可以认为是enum或者struct定义式; 可以是类型实例化。如:Vec。 在考虑变型时,主要是第二种情形,即:类型实例化。...我们可以将类型理解为类型函数,因为其接收类型参数,返回新类型。...这样,我们就可以引出变型三种情况了: 假设有类型构造:F, 并且有两个具体类型:Super和Sub满足Sub可以分别构建新类型F和F<Super

69030

IOS 与ANDROID框架及应用开发模式对照一

框架定义结构是结构,为应用程序提供一个运行模板,因此很多框架类实现是抽象或者有意不完整,这种类通常实现大量常见代码,但却让工作重要部分,要么未完毕。...要么以安全默认方式完毕。 由于应用程序结构是通用,开发者通过框架提供钩子或其他方式如子类化将其特殊化。...协议因此和托付一样,可作为子类化替换手段。 Apple 提供框架,声明了数十个协议。...视图控制还用来管理应用程序视图层次结构。 由于 iOS 应用程序显示内容空间非常有限,视图控制也提供了所须要基础结构,从一个视图控制中撤出视图。...通过直接将 UIView(或它子类子类化。您还能够定义自己自定视图。 除了包含视图和控制以外,应用程序还能够将 Core Animation 层并入其视图和控制分层结构中。

1K20

Scala之旅-简介篇

类可以由子类化和一种灵活、基于mixin组合机制(它可作为多重继承简单替代方案)来扩展。 Scala是函数式 鉴于一切函数都是值,又可以说Scala是一门函数式语言。...其中,for表达式对于构建查询很有用。这些特性使得Scala成为开发web服务等程序理想选择。...典型来说,这个类型系统支持: 变注解 上、下 类型边界 作为对象成员内部类和抽象类型 复合类型 显式类型自我引用 隐式参数和隐式转化 多态方法 类型推断让用户不需要标明额外类型信息。...字符串插值可以让用户使用自定义插值进行扩展。...Java最新特性如函数接口(SAMs)、lambda表达式、注解及类 在Scala中都有类似的实现。 另外有些Java中并没有的特性,如缺省参数值和带名字参数等,也是尽可能地向Java靠拢。

96740

再谈Java---下

注意 如果Man是Person一个子类型,而G是具有声明类或接口,那么G并不是G子类型!!!...,而且可以在定义形参时设定上限,用于表示传给该形参实际类型,要么是该上限类型,要么是该上限类型子类。...{1, 9}; List lb = new ArrayList(); fromArrayToColletion(b, lb); } 为了不让编译能准确地推断出方形方法中类型...上面两个方法中形参T只是用了一次,形参T产生唯一效果是可以在不同调用点传入不同实际类型。对于这种情况,应该使用通配符;通配符就是被设计用来支持灵活子类化。...类型通配符和方法一个很明显区别: 类型通配符既可以在方法签名中定义形参类型,也可以用于定义变量类型;但是方法中形参必须在对应方法中显示声明。

32320

北海 - Rust与面向对象(三)

,又能使用策略模式了;又或者,再来次继承把绿头鸭子类化吧,然后单独给绿头鸭实现捕猎。。...;另一方面,其它类型Duck也需要子类化吗,若是的话岂不是又免不了类型爆炸了!策略模式这时正失去优雅光环,它还是那个妙不可言“策略模式”吗?...Rust语言,则可以静多态一路走到黑,Duck类型当参数时一直约束使用下去。这样看起来,静多态是一种挺好应对策略模式后续变化解决方案。...Rust还有一种方式,可以终止这种“一直”,就是将有限静多态类型通过enum和类型统一起来,然后再使用时就不必继续用了,用这个enum和类型就好了。...这是个好方法,但也有个弊端,enum和类型终止了模块之外“扩展性”!在模块之外,再也无法为模块内enum和类型扩展其它Duck实现,而动多态和一直约束静多态,则仍不失模块外扩展性。

10810

窥探Swift之使用Web浏览编译Swift代码以及Swift中

如果你没有Mac笔记本,那么你只需打开你浏览,然后输入上述网址,就可以搞搞Swift这门语言了,灰常好用呢。下方截图就是该网址打开截图。 ?   ...下方函数两个参数数据类型允许不同,因为其参数使用是不同占位符,所以其类型允许是不同。具体使用方式如下所示。 ?   二.类     类,顾名思义,就是在类中使用。...在类中使用,其实和函数中使用是一样。就是在声明类时候,使用占位符表示一个要处理即可。下方就是一个类,其中有个类型数组,还有一个打印该数组方法,如下所示: ?     ...上面是定义,紧接着就是使用了,下方是创建一个实例,然后调用相应方法,具体如下所示。 ?     ...上面是定义与使用,还可以应用于结构体,协议,延展等,其使用方法和类是差不多,要学会举一反三。在本篇博客中就不对结构体,协议,延展,以及约束做过多赘述了。

1.4K50

Effective Java笔记(不含反序列化、并发、注解和枚举)

构造方法就不能被子类化 2.静态工厂方法就是一个静态方法,没有特别之处,所以没有构造实例化那么明显。...2.遇到多个构造参数时要考虑用构建:就是Builder模式。...,那么就可设置为私有 3.构造不能调用可被覆盖方法, 4.对于不是为了继承而设计普通类,可以禁止子类化 5.对于自用性,可以使用替代私有辅助方法代替需要自用可覆盖方法 5.接口优于抽象类 6....,即不带任何实际参数,List原生态类型就是List 2.在没有之前,所有的集合内都是一个Object数组,所以经常会出现将狗插入猫列表情况,而且还能运行很久。...3.好处就是编译帮你自动处理类型转换,而且如果出现狗插入猫列表时候,会在编译时候就进行提示 4.List和List区别在于:前者没有检测,后者在检测时候表明任何对象都能放入其中

927110

【java筑基】吃透(一万字长文,建议收藏)

1.类 2.方法 四、方法自动类型推断 五、通配符与方法区别 六、构造、设置通配符下限 1.构造 2.设置通配符下限 七、java8改进参数推断机制 八 擦除与转换...2.2 从类派生子类类派生子类时,我们可以为指定实参,也可以不使用,注意不要再使用形参T。...编译会根据方法传入实参自动推断形参值,通常会推断出最直接类型参数。 ​...T其实都只使用了一次,唯一效果就是在调用时传入实际类型参数,因此Collection接口设计时采用时上示第一种:类型通配符,类型通配符就是被设计来支持灵活子类化。...六、构造、设置通配符下限 1.构造 java中也支持构造。在类中允许使用菱形语法,但不允许在显示声明构造类型情况下使用菱形语法。

37820

效率编程 之「

第 1 条:请不要在新代码中使用原生态类型 每种都定义了一组参数化类型,其构成格式为:先是类或者接口名称,接着用尖括号()把对应于形式类型参数实际类型参数列表括起来。...例如,List(读作“字符串列表”)是一个参数化类型,表示元素类型为String列表。每个都定义了一个原生态类型,即不带任何实际参数名称。...类型有子类化规则,List是原生态类型List一个子类型,而不是参数化类型List子类型。...数组和不能很好地混合使用,因为数组是协变、具体,而只在编译时强化它们类型信息并在运行时擦除它们元素类型信息。因此,创建、参数化或者类型参数数组是非法。...但是,创建、参数化或者类型参数列表却是合法。为了获得带来类型安全,在面对数组和列表都能解决问题时,要优先选择列表。

58040

Byte Buddy 基础知识

; } } 生成 Object 类子类,拦截该子类 toString() 方法,并返回固定字符串 Hello World!。 执行结果: Hello World!...方法详解: subclass 创建一个新生成器以对提供类型进行子类化。如果提供类型是接口,则创建实现此接口类型新类。 method 匹配已由检测类型声明或继承方法。...这提供了机会来更改或覆盖该方法实现,默认值,注释或自定义属性。也可以将方法抽象化。 intercept 通过提供实现来实现先前定义或匹配方法。 make 创建此构建代表动态类型。...getLoaded 返回加载主类。 ---- 基础 API subclass 创建一个新生成器以对提供类型进行子类化。如果提供类型是接口,则创建实现此接口类型新类。...CHILD_FIRST 优先级类加载策略是 WRAPPER 修改版本,动态类型优先级高于具有相同名称父类加载任何类型。

1.4K10
领券