第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用混合數(shù)據(jù)類型在泛型中初始化數(shù)組

如何使用混合數(shù)據(jù)類型在泛型中初始化數(shù)組

慕勒3428872 2023-06-28 15:41:56
我正在研究 Java 數(shù)組,此外,我正在研究泛型。下面是初始化數(shù)組的兩種方法int[] data = {1,2,3,4,5,6,7,8,9};// orint[] data;data = new int[] {1,2,3,4,5,6,7,8,9};但是當(dāng)我使用泛型時(shí),我有多種數(shù)據(jù)類型,例如,String[] outcome = {"0 wins", "Tie" , "X wins"};上面的數(shù)組有一個(gè)字符串?dāng)?shù)據(jù)類型。如果在數(shù)組中我有類似下面的內(nèi)容怎么辦outcome = {7, "Tie" , 9.0};現(xiàn)在我在數(shù)組中混合了多種數(shù)據(jù)類型。我該如何編寫它或者是否可以使用泛型?我可以用ArrayList來(lái)做嗎?
查看完整描述

6 回答

?
天涯盡頭無(wú)女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

我想糾正這個(gè):

但是當(dāng)我使用泛型時(shí),我有多種數(shù)據(jù)類型

泛型需要同質(zhì)的數(shù)據(jù)類型。例如, aList<Integer>是一個(gè)只能容納 an 的列表Integer,而 aList<? extends Number>只能容納Numbers,它涵蓋了其他數(shù)字類型,如Long、Short、等……但由單一類型Double引用。Number

無(wú)論如何,您正在尋找的是一個(gè) Bag - 一個(gè)可以容納任意對(duì)象的集合。您可以使用 anObject[]或 a來(lái)實(shí)現(xiàn)這一點(diǎn)List<Object>,并且當(dāng)您想要使用它時(shí),您必須檢查提取的每個(gè)元素的類型,因?yàn)樵?Java 中沒(méi)有辦法擁有異構(gòu)數(shù)據(jù)類型,這就是您所需要的。正在尋找。


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

在我看來(lái),數(shù)組不太適合解決這個(gè)問(wèn)題,你應(yīng)該使用對(duì)象。


這不是對(duì)你的問(wèn)題的直接答案,而是以重新設(shè)計(jì)的形式給出的答案。

首先,讓我們解決您關(guān)于泛型和數(shù)組的陳述。數(shù)組是協(xié)變的并且保留的,而泛型是不變的并且被刪除的。

  • 協(xié)變意味著什么時(shí)候B extends A,就可以 Write?A[] aArray = new B[someSize];。不變意味著這是不可能的:ArrayList<A> aList = new ArrayList<B>();將導(dǎo)致編譯時(shí)錯(cuò)誤。

  • 保留意味著有關(guān)類型的信息在運(yùn)行時(shí)保留:數(shù)組總是“知道*其元素的類型。擦除意味著編譯后類型信息消失。這也稱為類型擦除。

協(xié)變和保留與不變和擦除的混合很可能會(huì)給你帶來(lái)麻煩。ArrayList這就是為什么使用 anObject[]而不是 aT[]作為其支持?jǐn)?shù)據(jù)結(jié)構(gòu)的原因。


現(xiàn)在到實(shí)際問(wèn)題。正如其他人已經(jīng)說(shuō)過(guò)的,我們可以沿著這條路創(chuàng)建一個(gè)Object[].?我強(qiáng)烈建議不要這樣做,因?yàn)槲覀儊G失了所有類型信息。取回該信息的唯一方法是檢查instanceof,這會(huì)使您的代碼變得嚴(yán)格。想象一下您更改條目的類型。在這種情況下,instanceofwill 返回false,可能會(huì)導(dǎo)致不需要的行為,并且(最好的情況)一些測(cè)試變成紅色,或者(最壞的情況)我們可能不會(huì)注意到它。

現(xiàn)在如何解決這個(gè)問(wèn)題?我們創(chuàng)建一個(gè)代表(我推斷的是)匹配結(jié)果的類:

public class MatchResult {

? ? private final int firstTeamScore;

? ? private final int secondTeamScore;


? ? public MatchResult(final int firstTeamScore, final int secondTeamScore) {

? ? ? ? this.firstTeamScore = firstTeamScore;

? ? ? ? this.secondTeamScore = secondTeamScore;

? ? }


? ? public int getFirstTeamScore() {

? ? ? ? return firstTeamScore;

? ? }


? ? public int getSecondTeamScore() {

? ? ? ? return secondTeamScore;

? ? }


? ? public String getResultForFirstTeam() {

? ? ? ? if (firstTeamScore > secondTeamScore) {

? ? ? ? ? ? return "Win"; // In an actual implementation, I would replace this with an enum

? ? ? ? } else if(firstTeamScore = secondTeamScore) {

? ? ? ? ? ? return "Tie";

? ? ? ? } else {

? ? ? ? ? ?return "Lose";

? ? ? ? }

? ? }

? ? // You can add a method public String getResultForSecondTeam(), I omitted it for brevity

}

我們贏得了什么?我們有類型。分?jǐn)?shù)始終為ints,結(jié)果始終為Strings。例如,如果我們將getReultforFirstTeam()from的類型更改String為 an?Enum,那么我們將在類型不再匹配的所有位置得到編譯器錯(cuò)誤。因此,我們磨練了快速失敗設(shè)計(jì),并被迫在必要時(shí)修改代碼。因此,我們甚至沒(méi)有機(jī)會(huì)再犯以前的那些偷偷摸摸的、不受歡迎的行為。



查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

outcome?=?{7,?"Tie"?,?9.0};

根本不合法。

您只能使用此語(yǔ)法 -數(shù)組初始值設(shè)定項(xiàng),其中在等于之后省略元素類型 - 在變量聲明中,例如

Object[]?outcome?=?{7,?"Tie"?,?9.0};


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

處理此問(wèn)題的一種方法是創(chuàng)建一個(gè)Object可以容納所有數(shù)據(jù)類型的數(shù)組


Object[] outcome = {7, "Tie" , 9.0};

之后您可以訪問(wèn)如下對(duì)象:


if(outcome[0] instanceof Integer){

   Integer i = (Integer) outcome[0];

}

反之亦然..


查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
函數(shù)式編程

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊

如前所述,您可以使用對(duì)象數(shù)組?;蛘?,您可以使用泛型類。這是一個(gè)例子:


public class Queue<E> {


? ? private ArrayList<E> queue;


? ? /**Unparametrized constructor**/

? ? public Queue() {

? ? ? ? queue = new ArrayList<E>();

? ? }


? ? /**Enqueues an element into the queue.**/

? ? public void enqueue(E val) {

? ? ? ? queue.add(val);

? ? }


? ? /**Dequeues an element from the queue.**/

? ? public E dequeue() {

? ? ? ? E output = queue.get(0);

? ? ? ? queue.remove(0);

? ? ? ? return output;

? ? }


? ? /**Gets the current size of the queue.**/

? ? public int size() {

? ? ? ? return queue.size();

? ? }

}



查看完整回答
反對(duì) 回復(fù) 2023-06-28
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

您將必須創(chuàng)建一個(gè)對(duì)象數(shù)組,因?yàn)?java 中的所有對(duì)象extends Object:


Object[] arr = new Object[3];

//to add objects to it:


arr[0]=new String("element at index 0");

arr[1]=new Integer(1);

arr[2]=new Character('2');

要查找索引 x 處的對(duì)象是否是(例如),那么Integer您必須使用強(qiáng)制轉(zhuǎn)換:


int x = (Integer)arr[x]; //x could be 0 or 1 or 2

您也可以使用以下方法來(lái)做到這一點(diǎn)ArrayList:


List<Object> listObjects = new ArrayList<Objects>();


查看完整回答
反對(duì) 回復(fù) 2023-06-28
  • 6 回答
  • 0 關(guān)注
  • 398 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)