Как я могу реализовать этот метод с помощью шаблона Java? - PullRequest
0 голосов
/ 16 марта 2011

создать интерфейс (используя шаблон):

package util.filter;
public interface Filter<INPUT,OUTPUT> {
    public OUTPUT filter(INPUT mes);
}

и внедренный класс (только для теста):

package util.filter;
public static class TestImplFilter implements Filter<Integer,String>{
    public String filter(Integer i){
        return "Hello World!";
    }
}

Я могу использовать этот код для тестирования:

Filter<Integer,String> f=new TestImplFilter();
System.out.println(f.filter(123));
//output: Hello World!

Теперь я хочу создать статический метод

, используя путь к классу impl (util.filter.TestImplFilter) в качестве аргумента ,

и INPUT в качестве второгоаргумент и вернуть OUTPUT .

, поэтому я написал следующий код:

private static Object createInstance(String classPath) {
    try {
        Class<?> tClass = Class.forName(classPath);
        if (tClass != null) {
            return tClass.newInstance();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
public final static Filter<?,?> getFilter(String path){
    return (Filter<?,?>)createInstance(path);
}

//my problem in here:
public final static OUTPUT filter(String path,INPUT mes){
    Filter<?,?> filter = (Filter<?, ?>) createInstance(path);
    return filter.filter(mes);
}

моя проблема в статическом методе filter(String path,INPUT mes), этот код является ошибкой.

как я могу это исправить и реализовать этот метод?

спасибо за помощь:)

1 Ответ

2 голосов
/ 16 марта 2011

моя ошибка, я поменял порядок, теперь он правильный

Вы также можете указать дженерики для статических методов.Для этого добавьте информацию о шаблоне шаблона перед параметром возврата:

 public final static<INPUT,OUTPUT>  OUTPUT filter(String path,INPUT mes){

, затем он скомпилируется.

public class Test {
    private static Object createInstance(String classPath) {
        try {
            Class<?> tClass = Class.forName(classPath);
            if (tClass != null) {
                return tClass.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    public final static <INPUT, OUTPUT> Filter<INPUT, OUTPUT> getFilter(String path) {
        return (Filter<INPUT, OUTPUT>) createInstance(path);
    }

    public final static <INPUT, OUTPUT> OUTPUT filter(String path, INPUT mes) {
        Filter<INPUT, OUTPUT> filter = getFilter(path);
        return filter.filter(mes);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...