我有一个通用类,它生成一个UI和一个子类,可以生成这个类的更专业版本。 问题是,超类也通常从多个位置调用,所以基本上我必须在超类天气中决定超类应该处理呼叫或者"传递它"给孩子上课。
public class AddEntryWindow<T extends SomeUiClass>
{
public AddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener)
{
// regular init stuff
if(T == PartUiClass) // I know this doesn't work like this
{
return new AddPartWindow(tableDefinition, refreshListener);
// I know this doesn't work either.
}
}
}
public class AddPartWindow extends AddEntryWindow<PartUiClass>
{
public AddPartWindow(TableDefinition tableDefinition, RefreshListener refreshListener)
{
// (usually super would have to be called here)
//special init stuff
}
}
电话看起来像这样:
new OpenBlockingWindowHandler(scene, new AddEntryWindow<T>(TableDefinitionGenerator.getTableDefinitionByClass(elementToSelect), this)));
这样的构造在java中是否有可能? 在某种程度上可以让构造函数&#34;返回&#34;另一个类实例?
答案 0 :(得分:0)
这样的构造在java中是否有可能?是不是以某种方式 可以让构造函数“返回”另一个类实例吗?
不,构造函数永远不能返回另一个类的实例。实际上,将任何 return语句添加到构造函数中会被认为是Java中的语法错误。
事实上,超类也被称为一般 多个位置,所以基本上我必须在决定 超类天气超类应该处理呼叫或“通过它 关于“给孩子上课。”
您可以向类添加静态工厂方法,该方法接受type参数的运行时类作为参数。像这样:
public static <T extends SomeUiClass> AddEntryWindow<T> createAddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener, Class<T> c){
if(PartUiClass.class.isAssignableFrom(c)){
return (AddEntryWindow<T>) new AddPartWindow(tableDefinition, refreshListener);
}
return new AddEntryWindow<>(tableDefinition, refreshListener);
}