Class Java 8中类加载与接口加载的性能影响
我想创建一个跨多个类的通用功能。 所以我有两种方法。 1) 创建一个新类并在其中包含一个静态方法。 2) 创建一个新接口,并在其中包含一个具体的静态方法 有人能解释这两种方法在性能方面的差异吗? 请考虑内存和处理的影响。Class Java 8中类加载与接口加载的性能影响,class,interface,java-8,static-methods,Class,Interface,Java 8,Static Methods,我想创建一个跨多个类的通用功能。 所以我有两种方法。 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