在接口中使用泛型方法没有意义吗?

时间:2014-01-08 07:45:58

标签: java generics interface

我正在编写一些函数式编程代码。我有一个接口,以及一个具有一个函数的类,该函数将该接口的实现作为参数。

  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的限制?是否有一些技巧可以在接口中声明泛型方法而不在接口级别声明它?

2 个答案:

答案 0 :(得分:2)

您可以在界面中声明泛型方法,如下所示:

public interface Statement
{
    <T> T executeTStatement();
}   

但是通过这种方式它没有多大意义 - 你有一个返回“某事”的方法,但什么时候会定义“某事”?因此T必须以某种方式受到约束:

  • 在接口级声明它,并在定义引用时必须绑定T(但你不想这样做)
  • 从某个参数推导出类型T到方法:

    public interface Statement
    {
        <T> T executeTStatement(T argument);
    }   
    

答案 1 :(得分:0)

大卫,一般来说java接口是一个面向对象的“原型”,用于实际对象实现。 “静态mathod”不是(正确)面向对象,接口上不允许使用静态方法。

让我说“静态方法”和“Java界面”不兼容(请接受我缺乏形式主义)。

最后一句话

  

是否有一些技巧可以在没有接口的情况下声明泛型方法   在接口级别声明它?

有点争议,请改进它。