将构造函数调用传递给其他类

时间:2015-01-17 04:16:25

标签: java javafx

我有一个通用类,它生成一个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;另一个类实例?

1 个答案:

答案 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);
}