Джава.Как изменить методы подписи - PullRequest
3 голосов
/ 02 декабря 2011

Можно ли изменить сигнатуру метода в Java в зависимости от параметра?

Пример:

Данный класс с общим параметром MyItem<T>.Предположим, у этого класса есть метод, который возвращает T Учитывая второй класс 'myReturner ()', который содержит метод myreturn(MyItem<T>).

Вопрос:

Можно лизаставить myreturn(MyItem<T>) вернуть объект T, в зависимости от универсального параметра MyItem?

Я полагаю, это невозможно, поскольку подпись устанавливается во время компиляции в Java, а T неизвестна во время компиляции.Если да, то как лучше всего смоделировать метод, который будет возвращать разные объекты в зависимости от параметра?Является ли единственным способом написать собственный метод для каждого типа параметра?

Ответы [ 5 ]

7 голосов
/ 02 декабря 2011

Как то так?

private <T> T getService(Class<T> type) {
    T service = ServiceTracker.retrieveService(type);
    return service;
}
3 голосов
/ 02 декабря 2011

Вы имеете в виду что-то вроде этого:

<T> T myMethod(MyItem<T> item) 

0 голосов
/ 02 декабря 2011

Я думаю, вы хотите что-то вроде этого:

public static void main(String[] args) {
    String bla = myMethod(new MyItem<String>());
}

public static <T> T myMethod(MyItem<T> item) {
    return null;
}

public class MyItem<T> {
    //just a dummy
}
0 голосов
/ 02 декабря 2011
0 голосов
/ 02 декабря 2011

Вы можете, если вы также сделаете весь класс общим для того же типа T, что-то вроде:

import java.util.ArrayList;

public class MyReturn<T> {

    public T myReturn(ArrayList<T> list){
        return null; //Your code here
    }
}
...