代码之家  ›  专栏  ›  技术社区  ›  Master Noob

使用泛型匹配参数和返回类型

  •  2
  • Master Noob  · 技术社区  · 6 年前

    是否可以使用泛型将返回类型与参数类型匹配?

    示例案例:

    我有一个抽象类,将实现它从不同的pojo导入数据,这个类包含一个abstracct方法import data。

    importdata返回的对象必须与传递给方法的对象类型相同。

    public abstract POJO importData(final POJO dataObject, final String messageId);
    

    由于抽象方法的每个实现的对象类型不同,并且类型不扩展另一个,如何定义抽象方法,以便实现返回类型和传递类型必须匹配?

    编辑:

    试验和测试:

    public abstract <T> T importData(final T jaxbObject, final String messageId);
    

    结果:

    方法的返回类型不必与传递的对象类型匹配。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Lino    6 年前

    可以使用方法级泛型参数:

    public abstract <T> T importData(final T dataObject, final String messageId);
    

    尽管这种类型的 T 每次通话可能会有所不同。例如,可以进行以下操作:

    POJO myPojo = myClass.importData(otherPojo, "messageId");
    Integer someInt = myClass.importData(5, "otherMessageId");
    String aSring = myClass.importData("Hello World", "anotherMessageId");
    

    如果这不是您想要的,您可以使用类级泛型参数的建议 @Leviand .

        2
  •  2
  •   Leviand    6 年前

    必须为类类型分配一个字母,使用方法时将根据调用方法时使用的类型分配该字母。

    public abstract T importData(final T dataObject, final String messageId);
    

    然后,在实现中,您可以检查对象的类型是否存在不同的行为。

    YourAbstractClass c = new YourAbstractClass() {
                @Override
                public <T> T importData(T dataObject, String messageId) {
                    if(dataObject instanceof String){
                        //doSomething
                    }else if (dataObject instanceof POJO){
                        //do POJO things
                    }
                    return null;
                }
            };