当前位置:  开发笔记 > 编程语言 > 正文

如何编写一个Java函数,它返回一个类型为'this'的实例,并在扩展时起作用?

如何解决《如何编写一个Java函数,它返回一个类型为'this'的实例,并在扩展时起作用?》经验,为你挑选了2个好方法。

这是一个懒惰的问题,但你得到了代表:-)

我有一个Java类,它返回自身的实例以允许链接(例如ClassObject.doStuff().doStuff())

例如:

public class Chainer
{
    public Chainer doStuff()
    {
       /* Do stuff ... */
       return this;
    }
}

我想扩展这个课程.有没有办法,也许使用泛型,扩展这个类而不必覆盖每个方法签名?

不是:

public class ChainerExtender extends Chainer
{
    public ChainerExtender doStuff()
    {
       super.doStuff();
       return this;
    }
}

我试过了:

public class Chainer
{
    public  A doStuff()
    {
       /* Do stuff ... */
       return (A)this;
    }
}

public class ChainerExtender extends Chainer
{
    public  A doStuff()
    {
       /* Do stuff ... */
       return super.doStuff();
    }
}

但这不起作用给出错误:

type parameters of A cannot be determined; 
no unique maximal instance exists for type variable A with upper bounds A,Chainer

我是否被迫拥有类声明:

public class Chainer> {}
public class ChainerExtender extends Chainer

按照这个问题?



1> Dov Wasserma..:

你有没有尝试过直截了当

public class Chainer
{
    public Chainer doStuff()
    {
       /* Do stuff ... */
       return this;
    }
}

public class ChainerExtender extends Chainer
{
    @Override
    public ChainerExtender doStuff()
    {
       /* Do stuff ... */
       super.doStuff();
       return this;
    }
}

使用Java 5,您可以声明重写方法以具有共变量返回类型,这意味着这就是:子类可以具有更具体的返回类型的重写方法签名.



2> tvanfosson..:

为什么不让它们全部返回界面?您必须在接口中定义所有可能的链接方法,并在基类中提供"null"实现,但您可以链接到您的内心.

public interface IChainer
{
  IChainer doStuff();
  IChainer doSomethingElse();
}

public class Chainer implements IChainer
{
  public IChainer doStuff()
  {
     // really do something
     return this;
  }

  public IChainer doSomethingElse()
  {
      return this; // do nothing
  }
}

public class ChainerExtender extends Chainer
{
   // simply inherits implementation for doStuff()

   public override IChainer doSomethingElse()
   {
       // really do something
       return this;
   }
}

注意:我上面可能有一些语法问题.在过去的几年里,我一直在使用C#进行编程.希望你明白了.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有