2 回答

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)基本的需求提供了奇怪的解決方案。

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ù)中,您可以控制從一種類型到另一種類型的精確“翻譯”。
添加回答
舉報