java - 如何指示一个类将具有特定的静态方法?

标签 java interface static-methods

我目前有一个接口(interface) Ring,它指定了加法、乘法等方法。因此,我可以制作一类其元素为 E 类型的 vector ,只要 E 扩展 Ring,它就有加法、点积等。例如,一个非常简单的类可能看起来像

public class Vector<E extends Ring<E>> {

     List<E> data;

     public Vector() {
          // constructor implementation here
     }

     public E dot(Vector<E> other) {
          // initialize ``result" somehow
          for (int index=0; index<data.size(); index++) {
              result.add(data.get(index).multiply(other.get(index)));
          }
          return result;
     }

}

在这个简单的示例中,可以简单地将结果初始化为 data.get(0).multiply(other.get(0)) ,然后从 1 开始 for 循环,但我想知道是否有一种指定存在类型 E 的“零元素”的方法。

理想情况下,我想指定 E 有一个名为 Zero() 的静态方法,以便零元素就是 E.zero()。我似乎想不出办法来做到这一点。另一方面,我不能只向 Ring 接口(interface)添加一个 Zero() 方法,因为那样我就必须做类似 (new E()).zero() 的事情,当然,不能在中创建通用构造函数那样。有一个愚蠢的捷径涉及类似 E Zero = data.get(0).zero() 的东西,但这看起来不太好,只有当我已经有另一个 E 类型元素的实例 float 时才有效(这可能不会)在另一种情况下也是如此)。那么,有没有什么好的方法来指定这样一个零元素的存在,并保证在任何扩展 Ring 的类 E 中实现?

最佳答案

您不能要求实现类具有静态方法。我建议您不要重复使用像 Vector 这样的常见内置类名称,因为它会导致困惑。

如果您对构造有重要要求,我建议您使用工厂方法来创建实例。在您的情况下,您可以指定 E 有一个方法 zero() 即使它不是静态的。问题是您必须传递该类或该类的实例作为参数。方法/构造函数不知道调用它时使用了什么泛型,并且它们必须是参数。

关于java - 如何指示一个类将具有特定的静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27474560/

相关文章:

java - 在struts 2对话框中显示错误消息?

java - (HTTPLog)-静态 : isSBSettingEnabled false error and app is closing

java - 关于 Java 接口(interface)和多态性

java - Comparator.comparing(...) 在采用 String::compareTo 时抛出非静态引用异常

java - 使用 Array.sort() 不使用比较器对数组进行排序

java - 将非英文字符串插入UTF-8 Oracle数据库

java - Selenium 中的 SearchContext 和 WebDriver 接口(interface)有什么区别或者它们之间有什么关系?

android - 在自定义 View 中调用 fragment 方法

java - 使用静态方法比导入整个类便宜吗?

java - 通过对象实例访问静态方法