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

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

動態(tài)檢查實例是否實現(xiàn)接口

動態(tài)檢查實例是否實現(xiàn)接口

繁星淼淼 2022-10-12 10:22:31
我正在嘗試創(chuàng)建一個函數(shù),它接受兩個參數(shù)——一個類實例和一個接口——如果提供的類實例實現(xiàn)了提供的接口,則返回 true。我的問題是我找不到以這種方式將接口作為參數(shù)傳遞的方法。我的嘗試目前看起來像這樣:interface myInterface{}class myClass implements myInterface{}...// Function to check if a class implements an interface:boolean doesImplementInterface(object classToTest, ??? interfaceToTestAgainst){    if(i.getClass().isInterface())    {        return o.getClass().isInstance(i);    }    return false;}...// Would call the "doesImplementInterface" method like this:doesImplementInterface(new myClass(), myInterface);在這里可能很難看到,但是在定義“doesImplementInterface”函數(shù)時,我無法弄清楚第二個參數(shù)必須是什么類型。我正在嘗試傳遞所提供的類將對其進行測試的接口,但據(jù)我所知,沒有可用于以這種方式傳遞接口的變量類型。是否可以以這種方式將接口作為參數(shù)傳遞,還是應(yīng)該開始探索替代選項?
查看完整描述

2 回答

?
冉冉說

TA貢獻1877條經(jīng)驗 獲得超1個贊

解釋

您需要將接口作為Class(文檔)令牌傳遞。此外,您需要檢查相反的方式:interfaceToTestAgainst.isInstance(classToTest). 目前,您正在嘗試檢查接口是否是該類的實例。


boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {

    if (!interfaceToTestAgainst.isInterface()) {

        return false;

    }

    return interfaceToTestAgainst.isInstance(classToTest);

}

或在一行中:


boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {

    return interfaceToTestAgainst.isInterface()

        && interfaceToTestAgainst.isInstance(classToTest);

}

稍微改了一下名字:


boolean isInstanceOfInterface(Object obj, Class<?> interfaceToken) {

    return interfaceToken.isInterface()

        && interfaceToken.isInstance(obj);

}

調(diào)用該方法:


boolean result = isInstanceOfInterface(new Dog(), CanBark.class);

筆記

您的問題聽起來像是XY 問題。首先可能有更好的解決方案來解決您試圖通過此嘗試解決的問題。


如果可以避免的話,丟失類型信息,將系統(tǒng)降級到不再是編譯時安全的系統(tǒng)通常是非常糟糕的。


考慮重新思考/設(shè)計你的方法。不過,請注意,我不知道您首先要解決什么問題。


查看完整回答
反對 回復(fù) 2022-10-12
?
阿晨1998

TA貢獻2037條經(jīng)驗 獲得超6個贊

您不需要為此創(chuàng)建方法。簡單使用

boolean doesImplement = ITest.class.isAssignableFrom(Test.class)

在實例的情況下,使用 instance.getClass() 即

boolean doesImplement = ITest.class.isAssignableForm(testObj.getClass())


查看完整回答
反對 回復(fù) 2022-10-12
  • 2 回答
  • 0 關(guān)注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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