为了账号安全,请及时绑定邮箱和手机立即绑定

Java 9 接口私有方法

标签:
Java


Java 9 接口私有方法


Java 9已经发布,并且已经发生了很多变化。今天我们将研究接口中Java 9私有方法的变化。

目录[ 隐藏 ]

接口中的Java 9私有方法

最近的java版本中的接口发生了很多变化。几天前我写了一篇关于Java 9功能的文章。我们将在这篇文章中讨论以下部分。

  1. Java 7接口

  2. Java 8接口更改

  3. Java 9接口更改

  4. 在接口中定义私有方法的规则?

  5. 为什么我们需要在接口中使用私有方法?

  6. 面试问题和答案

在这篇文章中,我提供了伪代码只是为了理解这个新功能,因为每个人都知道java中接口是什么,Java中私有方法是什么。

Java 7接口

在Java SE 7或更早版本中,接口只能有两种东西。

  1. 常数变量

  2. 抽象方法

我们无法在接口中提供方法实现。如果我们想要提供抽象方法和非抽象方法(方法与实现)的组合,我们只需要去抽象类

   public interface DBLogging{
      String MONGO_DB_NAME = "ABC_Mongo_Datastore";
      String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
      String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";      void logInfo(String message);      void logWarn(String message);      void logError(String message);      void logFatal(String message);
   }

这里我们定义了几个常量和公共抽象方法。如果我想在这里为这些方法提供一些实现,比如默认实现,该怎么办?然后我们应该在Java 7或更早版本中使用抽象类。

Java 8接口更改

Oracle Corporation 在Java 8 Release中引入了一些新的接口功能。这是默认方法静态方法功能。

是的,我们可以从Java 8开始在Interface中编写方法实现。我们需要使用default关键字来定义它们,如下所示。

在Java 8中,一个接口只能有四种东西:

  1. 常数变量

  2. 抽象方法

  3. 默认方法

  4. 静态方法

Java 8界面更改中添加了默认和静态方法。

   public interface DBLogging{
      String MONGO_DB_NAME = "ABC_Mongo_Datastore";
      String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
      String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";      // abstract method example
      void logInfo(String message);      // default method example
      default void logWarn(String message){         // Step 1: Connect to DataStore
         // Step 2: Log Warn Message
         // Step 3: Close the DataStore connection
      }      default void logError(String message){         // Step 1: Connect to DataStore
         // Step 2: Log Error Message
         // Step 3: Close the DataStore connection
      }      default void logFatal(String message){         // Step 1: Connect to DataStore
         // Step 2: Log Fatal Message
         // Step 3: Close the DataStore connection  
      }      // static method example
      static boolean isNull(String str) {
	System.out.println("Interface Null Check");	return str == null ? true : "".equals(str) ? true : false;
      }      // Any other abstract, default, static methods
   }

上面的示例显示了我们可以在Java 8接口中执行的所有操作,请注意一组额外的默认和静态方法。

您是否注意到所有日志方法中的代码冗余?每种方法都是自己打开和关闭连接。如果我们想要代码重用,那么我们将不得不将这些公共代码移动到公共方法,但随后它将被所有其他类访问。

如果我们想重用代码但又不想将其暴露给其他人,该怎么办?我们将不得不使用私有方法为公共代码进行抽象类。

Java 9接口更改

为了解决上述场景,Oracle Corporation在java 9发行版的接口中引入了私有方法。

从Java 9开始,我们可以使用private访问修饰符在接口中编写私有方法,如下所示(与其他私有方法一样)。

在Java 9及更高版本中,接口可以有六种类型:

  1. 常数变量

  2. 抽象方法

  3. 默认方法

  4. 静态方法

  5. 私人方法

  6. 私有静态方法

Java 9接口更改中添加了私有方法和私有静态方法。

public interface DBLogging {
	String MONGO_DB_NAME = "ABC_Mongo_Datastore";
	String NEO4J_DB_NAME = "ABC_Neo4J_Datastore";
	String CASSANDRA_DB_NAME = "ABC_Cassandra_Datastore";	default void logInfo(String message) {		log(message, "INFO");
	}	default void logWarn(String message) {		log(message, "WARN");
	}	default void logError(String message) {		log(message, "ERROR");
	}	default void logFatal(String message) {		log(message, "FATAL");
	}	private void log(String message, String msgPrefix) {		// Step 1: Connect to DataStore
		// Step 2: Log Message with Prefix and styles etc.
		// Step 3: Close the DataStore connection
	}	// Any other abstract, static, default methods}

在这里,我们将冗余代码移动到一个通用的私有方法中,以便我们的API客户端无法看到它们。请注意Eclipse Oxygen支持Java 9的下图。


在接口中定义私有方法的规则?

在接口中编写私有方法时,我们应遵循以下规则:

这不是一个新规。我们不能使用私有和抽象修饰符的组合,因为它们具有不同的含义。

这就是私有方法应该完全实现的原因。

在Java中,我们知道private是最不可见的访问修饰符。所以我们无法降低它从私有到任何其他修饰符的可见性。

  1. 我们应该使用private修饰符来定义这些方法。

  2. 没有私有和抽象修饰符在一起,它会给编译器错误。

  • “private”方法意味着完全实现的方法,因为子类不能继承和覆盖此方法。

  • “抽象”方法意味着无实现方法。这里的子类应该继承并覆盖此方法。

私有方法必须包含正文。

没有比私人修饰符更少的可访问性。

这些接口私有方法仅在该接口中有用或可访问。我们无法访问或继承从接口到另一个接口或类的私有方法。

为什么我们在Interface中需要私有方法?

接口中的Java 9私有方法具有以下优点。

  1. 无需编写重复代码,因此代码可重用性更高。

  2. 我们可以选择只将我们想要的方法实现暴露给客户端。

这就是接口中Java 9私有方法的变化。


翻译&转载:https://www.journaldev.com/12850/java-9-private-methods-interfaces


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消