我正在编写一些函数式编程代码。我有一个接口,以及一个具有一个函数的类,该函数将该接口的实现作为参数。
public interface Statement
{
T executeTStatement();
}
public class StatementExecutor
{
public static<T> T executeStatement(Statement statement)
{
T result;
try
{
.
.
result = statement.executeStatement();
.
.
}
catch.....
finally....
return result;
}
}
因此,类中的StatementExecutor类和executeStatment函数都可以,因为executeStament是用static声明的,并且不需要在类声明中。但是因为static是接口方法的非法修饰符,所以在接口中不能做同样的事情,我只能添加到接口声明,我想避免它,因为在该接口中只有一个泛型方法。 所以问题是,如果我遇到这样的情况,我的设计出现了问题,或者只是java的限制?是否有一些技巧可以在接口中声明泛型方法而不在接口级别声明它?
答案 0 :(得分:2)
您可以在界面中声明泛型方法,如下所示:
public interface Statement
{
<T> T executeTStatement();
}
但是通过这种方式它没有多大意义 - 你有一个返回“某事”的方法,但什么时候会定义“某事”?因此T必须以某种方式受到约束:
从某个参数推导出类型T到方法:
public interface Statement
{
<T> T executeTStatement(T argument);
}
答案 1 :(得分:0)
让我说“静态方法”和“Java界面”不兼容(请接受我缺乏形式主义)。
最后一句话
是否有一些技巧可以在没有接口的情况下声明泛型方法 在接口级别声明它?
有点争议,请改进它。