Можно ли установить тип возвращаемого значения абстрактного метода таким же, как у класса? - PullRequest
0 голосов
/ 14 июня 2019

Я бы хотел установить тип возвращаемого значения моего абстрактного метода таким же, как у класса, а не тип абстрактного класса, но тот же тип, что и унаследованного класса.

Ответы [ 2 ]

3 голосов
/ 14 июня 2019

Вы можете использовать шаблон самостоятельного ввода:

abstract class A<T extends A<T>> {
    abstract T foo();
}

class B extends A<B> {
    B foo() {
        return this;
    }
}
0 голосов
/ 14 июня 2019

Все три из них делают одно и то же.

public class TestAbstract {
   public static void main(String[] args) {
      B b1 = new B();
      A a1 = b1.getMyClass();
      System.out.println(a1.getClass().getName());
      A a2 = b1.getItThisWay();
      System.out.println(a2.getClass().getName());
      A a3 = b1;
      System.out.println(a3.getClass().getName());
   }
}

abstract class A {
   abstract public A getMyClass();
}

class B extends A {
   public A getMyClass() {
      return this;
   }

   public A getItThisWay() {
      return this;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...