переопределяющий метод интерфейса - PullRequest
3 голосов
/ 26 января 2012

Для интерфейса, такого как

public interface something<T>
{
   public something<T> somemethod();
}

из того, что я понимаю, абстрактный метод somemethod () необходимо переопределить методом, который возвращает объект, реализующий интерфейс. Однако любые попытки сделать это привели к ошибке компилятора «не переопределять абстрактный метод somemethod ()».

Я пытался сделать что-то вроде

public class someclass {
...
    public something<T> somemethod() { ... return new someclass(); }
...
or 
    public someclass somemethod() { ... return new someclass(); }
...
}

Как именно я бы реализовал такой метод?

Ответы [ 8 ]

3 голосов
/ 26 января 2012

Все это должно скомпилироваться:

class test<T> implements something<T>{
    public something<T> somemethod(){
        return new test<T>();
    }
}

class test1<T> implements something<T>{
    public test1<T> somemethod(){
        return new test1<T>();
    }
}   

class test2 implements something<Integer>{
    public something<Integer> somemethod(){
        return new test2();
    }
}

class test3 implements something<Integer>{
    public test3 somemethod(){
        return new test3();
    }
}
3 голосов
/ 26 января 2012

В вашем классе реализации отсутствует общее объявление.Вот пример:

public interface Something <T> {

    public Something<T> someMethod();

}

class SomethingImplementation <T> implements Something <T> {

    @Override
    public Something<T> someMethod() {
        return null;
    }

}
1 голос
/ 26 января 2012

Прежде всего, ваш someclass не реализует интерфейс в приведенном выше примере кода. Вы можете заставить его реализовать интерфейс для конкретного конкретного типа, как в следующем примере, где String используется в качестве конкретного типа. Затем метод должен будет вернуть something<String>.

public class someclass implements something<String> {
    public something<String> somemethod() {
        return new someclass();
    }
}

Или вы можете иметь класс someclass с параметром типа и использовать его для интерфейса:

public class someclass<X> implements something<X> {
    public something<X> somemethod() {
        return new someclass<X>();
    }
}
0 голосов
/ 26 января 2012
public class someclass<T> extends something<T> {

public something<T> somemethod() { ... return new someclass<T>(); }}
0 голосов
/ 26 января 2012

Как я понимаю, вам нужно реализовать интерфейс чего-то, вы можете сделать это простым способом:

public class someclass<T> implements something<T> {
    public something<T> somemethod() { ... return new someclass(); }
}
0 голосов
/ 26 января 2012

Чтобы переопределить метод, вы должны реализовать метод с теми же типами параметров и с тем же типом возвращаемого значения.
String something(){}
будет переопределено на String something(){}
, но НЕ с char[] something(){} или String something(int){}

0 голосов
/ 26 января 2012

Вам также необходимо расширить интерфейс с помощью универсального, такого как:

открытый класс someclass реализует что-то { public что-то somemethod () { ... } }

0 голосов
/ 26 января 2012

из того, что я понимаю, абстрактный метод somemethod () должен переопределено методом, который возвращает объект, реализующий интерфейс.

Это не правильно. Метод somemethod должен возвращать something<T>.

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