我们之前讨论过Java泛型的基础知识。在本文中,我们将了Java中解的通用构造函数。泛型构造函数是至少需要有一个泛型类型参数的构造函数。我们将看到泛型构造函数并不都是在泛型类中出现的,而且并非所有泛型类中的构造函数都必须是泛型。
首先,先写一个简单的类:条目,它不是泛型类:
公共类条目{ 私人字符串数据; 私人int等级; } >之前在这个类中,我们将添加两个构造函数:一个带有两个参数的基本构造函数和一个通用构造函数。
<强> 2.1基本构造器强>
第
条目一个构造函数:带有两个参数的简单构造函数:
公共入口(字符串数据,int排名){ 这一点。数据=https://www.yisu.com/zixun/data; 这一点。排名=等级; } >之前现在,让我们使用这个基本构造函数来创建一个条目对象
@Test 公共空间givenNonGenericConstructor_whenCreateNonGenericEntry_thenOK () { 输入条目=新条目(“样本”,1); assertequal(“样本”,entry.getData ()); assertequal (entry.getRank ()); } >之前<强> 2.2泛型构造器强>
接下来,第二个构造器是泛型构造器:
公共& lt; E Rankable延伸,Serializable>条目(E元素){ 这一点。data=https://www.yisu.com/zixun/element.toString (); 这一点。排名=element.getRank (); } >之前虽然条目类不是通用的,但它有一个参数为E的泛型构造函数。
泛型类型E是受限制的,应该实现Rankable和序列化接口。
现在,让我们看看Rankable接口、下面是其中一个方法:
公共接口Rankable { 公共int getRank (); } >之前假设我们有一个实现Rankable接口的类——产品
公共类产品实现Rankable Serializable { 私人字符串名称; 私人双价格; 私人int销售; 公共产品(字符串名称、双价格){ this.name=名称; 这一点。价格=价格; } @Override 公共int getRank () { 返回销售; } } >之前然后我们可以使用泛型构造函数和产品创建条目对象:
@Test 公共空间givenGenericConstructor_whenCreateNonGenericEntry_thenOK () { 产品产品=新产品(“牛奶”,2.5); product.setSales (30); 输入条目=新条目(产品); entry.getData assertequal (product.toString () ()); assertequal (30, entry.getRank ()); } >之前
接下来,我们看一下泛型类:GenericEntry
公开课GenericEntry{ 私人T数据; 私人int等级; } >之前 我们将在此类中添加与上一节相同的两种类型的构造函数。
<强> 3.1基础构造器强>
首先,让我们为GenericEntry类编写一个简单的非泛型构造函数:
公共GenericEntry (int排名){ 这一点。排名=等级; } >之前尽管GenericEntry是泛型类,但这是一个简单的,没有任何参数的构造函数。
现在,我们可以使用此构造函数来创建GenericEntry:
@Test 公共空间givenNonGenericConstructor_whenCreateGenericEntry_thenOK () { GenericEntry输入=new GenericEntry (1); assertNull (entry.getData ()); assertequal (entry.getRank ()); } >之前 <强> 3.2泛型构造器强>
接下来,在类中添加第二个构造函数:
公共GenericEntry (T数据,int排名){ 这一点。数据=https://www.yisu.com/zixun/data; 这一点。排名=等级; } >之前这是一个泛型构造函数,它有一个泛型类型T的数据参数。注意,我们不需要在构造函数声明中添加,因为它是隐含的。
现在,让我们测试一下通用构造函数:
弹簧引导实现跺脚协议的WebSocket的方法步骤