2 回答

TA貢獻1830條經驗 獲得超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因為您不知道參數中編碼的實際返回類型typeToCastTo。
也就是說,如果您手頭有一個 Class 的實例,那么它至少有意義:
Class<Foo> fooClass = (Class<Foo>) Thread.currentThread().getContextClassLoader().loadClass("my.foo.Foo");
Foo fooObject = foo.cast(object);
但這一切似乎毫無意義......
根據評論。要調用父類的私有方法,您不需要強制轉換:
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);
但在使用反射來實現這樣的事情之前,你真的應該三思而后行。這看起來像是一個糟糕的類/接口設計,導致為相當基本的需求提供了奇怪的解決方案。

TA貢獻1811條經驗 獲得超6個贊
替代方法(雖然我不知道這是否被認為是不好的做法):
public TypeToCastTo Cast(T object, String TypeToCastTo) {
switch (TypeToCastTo) {
case "foo":
return new Foo(object);
case "otherType":
return new OtherType(object);
...
}
}
對于您想要處理的不同類型,您將需要帶有相應參數(重載)的特定構造函數。在這些構造函數中,您可以控制從一種類型到另一種類型的精確“翻譯”。
添加回答
舉報