我如何使用java模板实现这个方法? [英] how can I implement this method using java template?

查看:125
本文介绍了我如何使用java模板实现这个方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

创建一个接口(使用模板):

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

$ / code>

和一个实现的类(仅用于测试):

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

我可以使用这段代码来测试:

 过滤<整数,字符串> f = new TestImplFilter(); 
System.out.println(f.filter(123));
//输出: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();
}
返回null;
}
public final static Filter<?,?> getFilter(String path){
return(Filter<?,?>)createInstance(path);
}

//我在这里的问题:
public final static OUTPUT filter(String path,INPUT mes){
Filter< ?,?> filter =(Filter <?,?>)createInstance(path);
return filter.filter(mes);

我的问题在静态方法 filter(String path, INPUT mes),这段代码是错误的。



我该如何解决它并实现这个方法?

感谢您的帮助:)

解决方案

我的错误,我捣乱了命令,现在是正确

您也可以为静态方法指定泛型。为此,请在返回参数之前添加gereric模板信息:

  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();
}
返回null;
}

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

public final static< INPUT,OUTPUT> OUTPUT过滤器(字符串路径,INPUT消息){
过滤< INPUT,OUTPUT> filter = getFilter(path);
return filter.filter(mes);
}
}


create a interface(using template):

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

and an implemented class (only for test):

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

I can using this code to test:

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

now,I want create a static method,

using impl class path (util.filter.TestImplFilter) as an argument,

and INPUT as second argument, and return a OUTPUT.

so, I writed follow code:

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);
}

my problem in static method filter(String path,INPUT mes), this code is error.

how can I fix it and implement this method?

thanks for help :)

解决方案

my mistake, I mashed the order, now it is correct

You can specifiy generics for static methods too. To do that, add the gereric template information ahead of the return parameter:

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

then it will compile.

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);
    }
}

这篇关于我如何使用java模板实现这个方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆