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

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

java 比較器可以識別類型嗎?

java 比較器可以識別類型嗎?

郎朗坤 2023-08-16 10:03:05
我想要一種簡單的方法來基于任何給定的 Comparable 類創(chuàng)建 Comparator 對象,因此我編寫了 ComparatorCreator 對象,我相信它會查看其泛型的類型并返回正確的 Comparator 對象,我可以用它來比較該對象的對象類型。所以我寫了下面的代碼來測試我的想法。我的信念是,由于 BackwardsInt 類的 Compareto 方法是一個(gè)反向比較器,它應(yīng)該能夠以相反的順序比較任何兩個(gè)數(shù)字。但當(dāng)它遍歷這些語句時(shí),它在比較兩個(gè)整數(shù)時(shí)完全忽略了反轉(zhuǎn),甚至拋出了一個(gè)錯誤。我想知道為什么會發(fā)生這種情況。我創(chuàng)建的比較器似乎知道我在其參數(shù)中傳遞的數(shù)字的類型。(不久前我也真正陷入了有界通配符,所以如果這導(dǎo)致了問題,那么哎呀)。import java.util.Comparator;public class what {    public static void main(String[] ignoreme)    {        Comparator comp = new ComparatorCreator<BackwardsInt>().getComparator();        //comp should represent a Comparator<Number> which redirects to BackwardsInt.compareTo        int big=6;        int small=2;        BackwardsInt bbig=new BackwardsInt(6);        BackwardsInt bsmall=new BackwardsInt(2);        System.out.println(comp.compare(bbig, bsmall));//prints -1 good        System.out.println(comp.compare(bbig, small));//prints -1 good        System.out.println(comp.compare(big, small));//prints 1 why?        System.out.println(comp.compare(big, bsmall));//throws error?!?    }    private static class ComparatorCreator<T extends Comparable<? super T>>{        public Comparator<? extends T> getComparator()        {            return T::compareTo;        }    }    private static class BackwardsInt extends Number implements Comparable<Number>{        private int val;        public BackwardsInt(int v)        {            val=v;        }        @Override        public int compareTo(Number o) {            double d = o.doubleValue()-val;            if(d>0)                return 1;            if(d<0)                return -1;            return 0;        }        public int intValue() {            return val;        }        public long longValue() {            return val;        }        public float floatValue() {            return val;        }        public double doubleValue() {            return val;        }    }}
查看完整描述

1 回答

?
守候你守候我

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

讓我們看看你的ComponentCreator


private static class ComparatorCreator<T extends Comparable<? super T>>{

    public Comparator<? extends T> getComparator()

    {

        return T::compareTo;

    }

}

如果稍微改變一下以使你的錯誤更清楚


private static class ComparatorCreator<T extends Comparable<? super T>>{

    public Comparator<? extends T> getComparator()

    {

        return (o1, o2) -> {

            return o1.compareTo(o2);

        };

    }

}

您使用的方法引用與我的 lambda 相同,但它使錯誤更加明顯。如果我們一一檢查您的樣品,我們可以看到以下內(nèi)容:


comp.compare(bbig, bsmall); // calls bbig.compareTo(bsmall)

comp.compare(bbig, small); // calls bbig.compareTo(small)

comp.compare(big, small); // calls big.compareTo(small)

comp.compare(big, bsmall); // calls big.compareTo(bsmal)

您收到的輸出是有意義的,因?yàn)閎ig.compareTo()將調(diào)用compareTo()該類的函數(shù)Integer。


查看完整回答
反對 回復(fù) 2023-08-16
  • 1 回答
  • 0 關(guān)注
  • 131 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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