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

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

有沒有辦法使用字符串來轉(zhuǎn)換為類型

有沒有辦法使用字符串來轉(zhuǎn)換為類型

慕運維8079593 2024-01-28 20:24:17
我有一個字符串告訴我要將對象轉(zhuǎn)換為什么,有沒有辦法轉(zhuǎn)換為該對象?這是一些偽代碼,定義了我想要做的事情public TypeToCastTo Cast(T object, String TypeToCastTo) {  switch (TypeToCastTo) {   case "foo":     return (foo)T;   case "otherType":     return (otherType)T;   ...  }}編輯我想創(chuàng)建一個游戲,我可以單擊一個按鈕來購買一些東西,例如繼承自 worldObject 的劍或盔甲。我想,因為我可能會返回一個武器或盔甲類(它們都繼承自 worldObject),所以返回一個 worldObject 然后向下轉(zhuǎn)換為正確的類(基于它的名稱(字符串))是有意義的。編輯2:正如評論中提到的,這是一個XY問題。我最初試圖創(chuàng)建一個返回向下類型的函數(shù),但實際上這沒有意義,因為在其他地方使用它的情況下,我將需要一個 switch 語句來確定如何處理該對象(此時我可以投射)所以而不是有public TypeToCastTo Cast(T object, String TypeToCastTo) {  switch (TypeToCastTo) {   case "foo":     return (foo)T;   ...  }}并使用我的函數(shù)來投射 WorldObject,我可以Method DoingSomethingWithWorldObject(WorldObject T) { switch(T.typeToCastTo) {  case "foo":    foo temp = (foo)T;    // code using temp  case "other":    other temp = (other)T;    // code using temp  ... }}盡管有幾個人提到我的想法可能是錯誤的,包括我標(biāo)記為正確的答案(盡管我問了錯誤的問題,但它回答了我的問題),我真正理解這一點的原因是因為一個回復(fù)那個被刪除了。
查看完整描述

2 回答

?
慕標(biāo)琳琳

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

正如評論中提到的,您可以通過使用反射和Class.cast方法來做到這一點:


public Object cast(Object object, String typeToCastTo) {

  switch (typeToCastTo) {

   case "foo":

     return Foo.class.cast(object);

   case "otherType":

     return OtherType.class.cast(object);

  }

}

但是,該方法的返回類型必須是,Object因為您不知道參數(shù)中編碼的實際返回類型typeToCastTo。


也就是說,如果您手頭有一個 Class 的實例,那么它至少有意義:


Class<Foo> fooClass = (Class<Foo>) Thread.currentThread().getContextClassLoader().loadClass("my.foo.Foo");

Foo fooObject = foo.cast(object);

但這一切似乎毫無意義......


根據(jù)評論。要調(diào)用父類的私有方法,您不需要強制轉(zhuǎn)換:


Object object = new SubFoo();

Method privateFooMethod = Arrays.asList(ParentFoo.class.getDeclaredMethods())

    .stream().filter(m -> m.getName().equals("privateFooMethod")).findAny()

    .get();

privateFooMethod.setAccessible(true);

privateFooMethod.invoke(object);

但在使用反射來實現(xiàn)這樣的事情之前,你真的應(yīng)該三思而后行。這看起來像是一個糟糕的類/接口設(shè)計,導(dǎo)致為相當(dāng)基本的需求提供了奇怪的解決方案。


查看完整回答
反對 回復(fù) 2024-01-28
?
楊魅力

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

替代方法(雖然我不知道這是否被認(rèn)為是不好的做法):


public TypeToCastTo Cast(T object, String TypeToCastTo) {

  switch (TypeToCastTo) {

   case "foo":

     return new Foo(object);

   case "otherType":

     return new OtherType(object);

   ...

  }

}

對于您想要處理的不同類型,您將需要帶有相應(yīng)參數(shù)(重載)的特定構(gòu)造函數(shù)。在這些構(gòu)造函數(shù)中,您可以控制從一種類型到另一種類型的精確“翻譯”。


查看完整回答
反對 回復(fù) 2024-01-28
  • 2 回答
  • 0 關(guān)注
  • 206 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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