[英]Dynamically retrive the java object of Object class to a given class when class name is known
[英]Dynamically converting java object of Object class to a given class when class name is known
是的,我知道。 問題的長標題......所以我在字符串中有類名。 我以這種方式動態創建該類的對象:
String className = "com.package.MyClass";
Class c = Class.forName(className);
Object obj = c.newInstance();
如何將該obj動態轉換為MyClass對象? 我不能這樣寫:
MyClass mobj = (MyClass)obj;
...因為className可以不同。
我認為它非常直接的反思
MyClass mobj = MyClass.class.cast(obj);
如果班級名稱不同
Object newObj = Class.forName(classname).cast(obj);
如果沒有,請聲明一個聲明要調用的方法的接口:
public interface MyInterface
{
void doStuff();
}
public class MyClass implements MyInterface
{
public void doStuff()
{
System.Console.Writeln("done!");
}
}
然后你用
MyInterface mobj = (myInterface)obj;
mobj.doStuff();
如果MyClass
不在你的控制之下,那么你就無法使它實現一些接口,而另一個選擇是依賴於反射( 參見本教程 )。
您不必將對象轉換為MyClass對象,因為它已經是。 你真正想做的就是拋出它,但由於類名在編譯時是不可知的,所以你不能這樣做,因為你不能聲明該類的變量。 我的猜測是你想要/需要類似“duck typing”的東西,即你不知道類名,但你知道編譯時的方法名。 Gregory提出的接口是您最好的選擇。
如果您不知道mojb
是MyClass
類型,那么如何創建該變量?
如果MyClass是接口類型或超類型,則無需進行轉換。
@SuppressWarnings("unchecked")
private static <T extends Object> T cast(Object obj) {
return (T) obj;
}
如果要將對象(ob1)強制轉換為類(classA),可以使用以下代碼。
classA instance = (classA) ob1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.