Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class Java 8中类加载与接口加载的性能影响_Class_Interface_Java 8_Static Methods - Fatal编程技术网

Class Java 8中类加载与接口加载的性能影响

Class Java 8中类加载与接口加载的性能影响,class,interface,java-8,static-methods,Class,Interface,Java 8,Static Methods,我想创建一个跨多个类的通用功能。 所以我有两种方法。 1) 创建一个新类并在其中包含一个静态方法。 2) 创建一个新接口,并在其中包含一个具体的静态方法 有人能解释这两种方法在性能方面的差异吗? 请考虑内存和处理的影响。 我应该选择哪种方法?为什么?从性能角度看,这应该无关紧要,也就是说,即使是这样,也会非常小;因此,这永远不会影响你的决定 另一方面,用静态方法定义一个接口(该方法仅用于公共代码)是一个很大的代码问题。接口中的静态方法通常被定义为返回该接口的实例;我倾向于将它们视为通常返回自身实

我想创建一个跨多个类的通用功能。 所以我有两种方法。 1) 创建一个新类并在其中包含一个静态方法。 2) 创建一个新接口,并在其中包含一个具体的静态方法

有人能解释这两种方法在性能方面的差异吗? 请考虑内存和处理的影响。


我应该选择哪种方法?为什么?

从性能角度看,这应该无关紧要,也就是说,即使是这样,也会非常小;因此,这永远不会影响你的决定

另一方面,用静态方法定义一个接口(该方法仅用于公共代码)是一个很大的代码问题。接口中的静态方法通常被定义为返回该接口的实例;我倾向于将它们视为通常返回自身实例的静态工厂方法,如
谓词#isEqual

static <T> Predicate<T> isEqual(Object targetRef) {
    return (null == targetRef)
            ? Objects::isNull
            : object -> targetRef.equals(object);
}
以及扩展此接口的类
TestImpl
,而不是:

 TestImpl ti = new TestImpl();
 ti.testAgain();
 ti.test(); // will not compile
因此,您可能可以使用默认方法而不是静态方法。我有时喜欢这样做,因为这样可以使代码更接近我需要它的地方:如果某个类使用
默认方法实现了一个接口,那么代码就在那里,我不需要使用外部类


另一方面,静态实用程序类在jdk中随处可见,例如
集合
拆分器
,如果我站在您的立场上,我会使用这些类

创建一个新方法并在其中包含一个具体的静态方法
?什么?我假设你的实际意思是“2)创建一个新接口,并在其中包含一个具体的静态方法。”在这种情况下,没有理由会有任何显著的性能差异。更正了问题。谢谢尤金和霍尔格。
 TestImpl ti = new TestImpl();
 ti.testAgain();
 ti.test(); // will not compile