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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

基于對象拆分為列表,不使用 instanceof

基于對象拆分為列表,不使用 instanceof

UYOU 2021-09-03 21:22:23
我直接進(jìn)入正題。我上了3節(jié)課。人,教授和學(xué)生。(角色,教授,校友)。教授和學(xué)生都從 Person 擴(kuò)展。但是 Person 也可以被實例化,因為它不是抽象的。我有 50 人,隨機(jī)生成在一個列表中。它可以是任何類型的教授或?qū)W生。我想將它們分別分成不同的列表。目前,我是這樣做的:for(Persona persona : personas) {        if(persona instanceof Profesor) {            profesores.add((Profesor) persona);        }        else if(persona instanceof Alumno) {            alumnos.add((Alumno) persona);        }        else {            nuevasPersonas.add(persona);        }    }profesores 是教授名單校友是學(xué)生名單nuevasPersonas 是人員列表哪個工作完美。但是有人告訴我不要使用instanceof,所以我不習(xí)慣。關(guān)于如何在不使用 instanceof 的情況下將它們分成列表的任何想法?謝謝。
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊

我會使用instanceof,你為什么不想習(xí)慣呢?

無論如何,另一種方法可能是擁有一個變量類型(帶有 getter,但沒有 setter),親自(=0),并在教授和學(xué)生中將其覆蓋為 1 和 2。然后,您將測試變量而不是使用 instanceof。


查看完整回答
反對 回復(fù) 2021-09-03
?
慕容森

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊

您可以使用每種對象類型重載“add”方法 - 類似于以下代碼。


main 方法只是將三個不同對象的實例添加到 ObjectSplitter 類中 - 它將它們分離到不同的集合中


public class ObjectSplitter {


public static void main(String ... args){


    ObjectSplitter d = new ObjectSplitter();

    d.addToCollection(new Object1());

    d.addToCollection(new Object1());

    d.addToCollection(new Object2());

    d.addToCollection(new Object1());

    d.addToCollection(new Object1());

    d.addToCollection(new Object1());

    d.addToCollection(new Object2());

    d.addToCollection(new Object3());

    d.addToCollection(new Object1());


    System.out.println("Num Ob1s : " + d.getOb1sSize());

    System.out.println("Num Ob2s : " + d.getOb2sSize());

    System.out.println("Num Ob3s : " + d.getOb3sSize());


}


private List<Object1> ob1s = new ArrayList<>();

private List<Object2> ob2s = new ArrayList<>();

private List<Object3> ob3s = new ArrayList<>();


void addToCollection(Object1 o){

    ob1s.add(o);

}


void addToCollection(Object2 o){

    ob2s.add(o);

}


void addToCollection(Object3 o){

    ob3s.add(o);

}


int getOb1sSize(){

    return ob1s.size();

}


int getOb2sSize(){

    return ob2s.size();

}


int getOb3sSize(){

    return ob3s.size();

}


static class Object1 {


}



static class Object2 extends Object1 {


}


static class Object3 extends Object2 {


}

}


查看完整回答
反對 回復(fù) 2021-09-03
?
holdtom

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

您也可以使用 getClass().getSimpleName() 如下:


public static void main (String[] args) throws java.lang.Exception

{

    List<Test1> list = new ArrayList<>(2);

    Test1 o1 = new Test1();

    list.add(o1);

    Test2 o2 = new Test2();

    list.add(o2);

    for (Test1 test : list) {

        System.out.println(test.getClass().getSimpleName());

    }

}

static class Test1{


}

static class Test2 extends Test1{


}

在 for 循環(huán)中,您可以使用如下代碼的 if 條件來完成您的工作:


for (Test1 test : list) {

    String className = test.getClass().getSimpleName();

    if(className.equals("Test1")) {

       System.out.println("Test1");

    } else if(className.equals("Test2")) {

       System.out.println("Test2");

    }

    System.out.println();

}

根據(jù)覆蓋方法的另一種解決方案是:


public static void main (String[] args) throws java.lang.Exception

{

    List<Test1> list = new ArrayList<>(2);

    Test1 o1 = new Test1();

    list.add(o1);

    Test2 o2 = new Test2();

    list.add(o2);

    for (Test1 test : list) {

        test.addToMyTypeList();

    }

    for(Test1 test : Test1.list) {

        System.out.println(test.getClass().getSimpleName());

    }

    for(Test1 test : Test1.list) {

        System.out.println(test.getClass().getSimpleName());

    }

}

static class Test1{

    public static List<Test1> list = new ArrayList<>();

    public void addToMyTypeList() {

        String className = test.getClass().getSimpleName();

        if(className.equals("Test1")) {

                    Test1.list.add(this);

        }

    }

}

static class Test2 extends Test1{

    public static List<Test1> list = new ArrayList<>();


    @Override

    public void addToMyTypeList() {

        String className = test.getClass().getSimpleName();

        if(className.equals("Test2")) {

                    Test2.list.add(this);

        }

    }

}


查看完整回答
反對 回復(fù) 2021-09-03
  • 3 回答
  • 0 關(guān)注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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