Java 将构造函数调用传递给其他类
我有一个生成UI的泛型类和一个应该生成这个类的更专业版本的子类。 问题是,超类也可以从多个位置通用地调用,因此基本上我必须在超类中决定超类是应该处理调用还是将其传递给子类Java 将构造函数调用传递给其他类,java,javafx,Java,Javafx,我有一个生成UI的泛型类和一个应该生成这个类的更专业版本的子类。 问题是,超类也可以从多个位置通用地调用,因此基本上我必须在超类中决定超类是应该处理调用还是将其传递给子类 public class AddEntryWindow<T extends SomeUiClass> { public AddEntryWindow(TableDefinition tableDefinition, RefreshListener refreshListener) {
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)));
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);
}
这种构造在java中是否可能?
是否有可能让构造函数返回另一个类实例
这种构造在java中是否可能?不知怎么的
可以让构造函数返回另一个类实例吗
不,构造函数永远不能返回另一个类的实例。实际上,在Java中,向构造函数添加任何return语句都被认为是语法错误
问题是,超类也从
多个地点,所以基本上我必须在
超类超类是否应该处理调用或传递调用
上儿童课
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)));
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);
}