真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java泛型構(gòu)造函數(shù)有哪些

本篇內(nèi)容介紹了“Java泛型構(gòu)造函數(shù)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)北海街道,十余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):13518219792

1.概述

我們之前討論過(guò)Java Generics的基礎(chǔ)知識(shí)。在本文中,我們將了解Java中的通用構(gòu)造函數(shù)。泛型構(gòu)造函數(shù)是至少需要有一個(gè)泛型類(lèi)型參數(shù)的構(gòu)造函數(shù)。我們將看到泛型構(gòu)造函數(shù)并不都是在泛型類(lèi)中出現(xiàn)的,而且并非所有泛型類(lèi)中的構(gòu)造函數(shù)都必須是泛型。

2.非泛型類(lèi)

首先,先寫(xiě)一個(gè)簡(jiǎn)單的類(lèi):Entry,它不是泛型類(lèi):

public class Entry {private String data;private int rank;}

在這個(gè)類(lèi)中,我們將添加兩個(gè)構(gòu)造函數(shù):一個(gè)帶有兩個(gè)參數(shù)的基本構(gòu)造函數(shù)和一個(gè)通用構(gòu)造函數(shù)。

2.1 基本構(gòu)造器

Entry第一個(gè)構(gòu)造函數(shù):帶有兩個(gè)參數(shù)的簡(jiǎn)單構(gòu)造函數(shù):

public Entry(String data, int rank) {this.data = data;this.rank = rank;}

現(xiàn)在,讓我們使用這個(gè)基本構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)Entry對(duì)象

@Testpublic void givenNonGenericConstructor_whenCreateNonGenericEntry_thenOK() {Entry entry = new Entry("sample", 1);assertEquals("sample", entry.getData());assertEquals(1, entry.getRank());}

2.2 泛型構(gòu)造器

接下來(lái),第二個(gè)構(gòu)造器是泛型構(gòu)造器:

public Entry(E element) {this.data = element.toString();this.rank = element.getRank();}

雖然Entry類(lèi)不是通用的,但它有一個(gè)參數(shù)為E的泛型構(gòu)造函數(shù)。

泛型類(lèi)型E是受限制的,應(yīng)該實(shí)現(xiàn)Rankable和Serializable接口。

現(xiàn)在,讓我們看看Rankable接口,下面是其中一個(gè)方法:

public interface Rankable {public int getRank();}

假設(shè)我們有一個(gè)實(shí)現(xiàn)Rankable接口的類(lèi)——Product

public class Product implements Rankable, Serializable {private String name;private double price;private int sales;public Product(String name, double price) {this.name = name;this.price = price;}@Overridepublic int getRank() {return sales;}}

然后我們可以使用泛型構(gòu)造函數(shù)和Product創(chuàng)建Entry對(duì)象:

@Testpublic void givenGenericConstructor_whenCreateNonGenericEntry_thenOK() {Product product = new Product("milk", 2.5);product.setSales(30);Entry entry = new Entry(product);assertEquals(product.toString(), entry.getData());assertEquals(30, entry.getRank());}

3.泛型類(lèi)

接下來(lái),我們看一下泛型類(lèi):GenericEntry

public class GenericEntry {private T data;private int rank;}

我們將在此類(lèi)中添加與上一節(jié)相同的兩種類(lèi)型的構(gòu)造函數(shù)。

3.1 基礎(chǔ)構(gòu)造器

首先,讓我們?yōu)镚enericEntry類(lèi)編寫(xiě)一個(gè)簡(jiǎn)單的非泛型構(gòu)造函數(shù):

public GenericEntry(int rank) {this.rank = rank;}

盡管GenericEntry是泛型類(lèi),但這是一個(gè)簡(jiǎn)單的,沒(méi)有任何參數(shù)的構(gòu)造函數(shù)。現(xiàn)在,我們可以使用此構(gòu)造函數(shù)來(lái)創(chuàng)建GenericEntry:

@Testpublic void givenNonGenericConstructor_whenCreateGenericEntry_thenOK() {GenericEntry entry = new GenericEntry(1);assertNull(entry.getData());assertEquals(1, entry.getRank());}

3.2 泛型構(gòu)造器

接下來(lái),在類(lèi)中添加第二個(gè)構(gòu)造函數(shù):

public GenericEntry(T data, int rank) {this.data = data;this.rank = rank;}

這是一個(gè)泛型構(gòu)造函數(shù),它有一個(gè)泛型類(lèi)型T的數(shù)據(jù)參數(shù)。注意,我們不需要在構(gòu)造函數(shù)聲明中添加,因?yàn)樗请[含的?,F(xiàn)在,讓我們測(cè)試一下通用構(gòu)造函數(shù):

@Testpublic void givenGenericConstructor_whenCreateGenericEntry_thenOK() {GenericEntry entry = new GenericEntry("sample", 1);assertEquals("sample", entry.getData());assertEquals(1, entry.getRank()); }

4.不同類(lèi)型的泛型構(gòu)造函數(shù)

在泛型類(lèi)中,還有一個(gè)構(gòu)造函數(shù),其泛型類(lèi)型與類(lèi)的泛型類(lèi)型不同:

public GenericEntry(E element) {this.data = (T) element;this.rank = element.getRank();}

GenericEntry構(gòu)造函數(shù)有類(lèi)型為E的參數(shù),該參數(shù)與T類(lèi)型不同。讓我們看看它的實(shí)際效果:

@Testpublic void givenGenericConstructorWithDifferentType_whenCreateGenericEntry_thenOK() {Product product = new Product("milk", 2.5);product.setSales(30);GenericEntry entry = new GenericEntry(product);assertEquals(product, entry.getData());assertEquals(30, entry.getRank());}

注意:在示例中,我們使用Product(E)創(chuàng)建Serializable(T)類(lèi)型的GenericEntry,只有當(dāng)類(lèi)型E的參數(shù)可以轉(zhuǎn)換為T(mén)時(shí),我們才能使用此構(gòu)造函數(shù)。

5.多種泛類(lèi)型

接下來(lái),我們有兩個(gè)泛型類(lèi)型參數(shù)的泛型類(lèi)MapEntry:

public class MapEntry {private K key;private V value;public MapEntry(K key, V value) {this.key = key;this.value = value;}}

MapEntry有一個(gè)兩個(gè)參數(shù)的泛型構(gòu)造函數(shù),每個(gè)參數(shù)都是不同的類(lèi)型。讓我們用一個(gè)簡(jiǎn)單的單元測(cè)試測(cè)試一下:

@Testpublic void givenGenericConstructor_whenCreateGenericEntryWithTwoTypes_thenOK() {MapEntry entry = new MapEntry("sample", 1);assertEquals("sample", entry.getKey());assertEquals(1, entry.getValue().intValue()); }

6.通配符

最后,我們可以在泛型構(gòu)造函數(shù)中使用通配符:

public GenericEntry(Optional optional) {if (optional.isPresent()) {this.data = (T) optional.get();this.rank = optional.get().getRank();}}

在這兒,我們?cè)贕enericEntry構(gòu)造函數(shù)中使用通配符來(lái)綁定Optional類(lèi)型:

@Testpublic void givenGenericConstructorWithWildCard_whenCreateGenericEntry_thenOK() {Product product = new Product("milk", 2.5);product.setSales(30);Optional optional = Optional.of(product);GenericEntry entry = new GenericEntry(optional);assertEquals(product, entry.getData());assertEquals(30, entry.getRank());}

請(qǐng)注意,我們應(yīng)該能夠?qū)⒖蛇x參數(shù)類(lèi)型(Product示例)轉(zhuǎn)換為GenericEntry類(lèi)型(Serializable示例)。

“Java泛型構(gòu)造函數(shù)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


分享文章:Java泛型構(gòu)造函數(shù)有哪些
分享網(wǎng)址:http://weahome.cn/article/jdphph.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部