我在谷歌上搜索了很多,但似乎我不知道一个术语来描述这种情况,因为我对编程很陌生。我上的是脓肿科。类似这样的东西:
public abstract A {
...
public void randomize() {...}
...
}
我有很多儿童班,比如class B extends A, class C extends A
。然后我有单独的班级,应该知道孩子班级的类型。类似这样的东西:
public class D {
private Class<? extends A> childClassType;
public C(Class<? extends A> type) { ... }
....
}
问题是:这个类应该有一个方法,该方法应该返回子类的对象(在这里作为参数传递)。这样我就可以给他的类型加一些值,并调用randomize()方法。
所以基本上,我在C类中需要这样的东西:
public [???] neededMethod() {
libraryMethodRequiringClassAsParameter(childClassType);
....
[???] childObject = ([???]) libraryMethodReturningObject();
childObject.randomize();
return childObject;
}
我不知道[???]的语法,因为我不知道这种情况是怎么叫的。我可以只创建一个对象(它有效),但之后我需要双重投射(从对象内部到A,从A外部到它的子对象),这似乎很愚蠢。
如有任何信息,我们将不胜感激。
我可以使用以下代码。希望它符合您的要求:
public class A {
...
public static void doStuff(Class<? extends B> clazz) {
try {
C obj = clazz.newInstance();
obj.randomize();
} catch (InstantiationException | IllegalAccessException e) {
}
}
}
abstract class B {
abstract void randomize();
}
class C extends B {
...
public void randomize() {
System.out.println("works");
}
}
我不知道我是否正确理解你,但你可能想要的术语是generic class
。这里有一些关于它的文档,应用到你的代码中,你可以有这样的
public class D<T> {
...
public T neededMethod() {...}
}
包含该类型的类D应该是与其一起使用的类型的泛型。
public class D<T extends A> {
private Class<T> childClassType;
public D(Class<T> type) { ... }
....
}
public T neededMethod() {
T childObject = (T)libraryMethodRequiringClassAsParameter(childClassType);
childObject.randomize();
return childObject;
}
}
使用Object
作为数据类型怎么样?在Java中,Object
是所有类中的超类。
public Object neededMethod() {
libraryMethodRequiringClassAsParameter(childClassType);
....
Object childObject = libraryMethodReturningObject();
if(childObject instanceof ClassFoo) {
((ClassFoo)childObject).randomize();
}
return childObject;
}