Java 7功能概述

前面我们讨论了所有未纳入Java 7的内容,然后回顾了将其纳入Java 7的有用的Fork / Join框架

今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能,这些功能虽然不是开创性的,但是对于任何能够使用JDK 7的开发人员来说都是有用的。

我提出了一个银行帐户课程,该课程展示了Project Coin功能的基础知识。

看一看…

public class ProjectCoinBanker {

 private static final Integer ONE_MILLION = 1_000_000;
 private static final String RICH_MSG = "You need more than $%,d to be considered rich.";

 public static void main(String[] args) throws Exception {
  System.out.println(String.format(RICH_MSG, ONE_MILLION));

  String requestType = args[0];
  String accountId = args[1];
  switch (requestType) {
   case "displayBalance":
    printBalance(accountId);
    break;
   case "lastActivityDate" :
    printLastActivityDate(accountId);
    break;
   case "amIRich" :
    amIRich(accountId);
    break;
   case "lastTransactions" :
    printLastTransactions(accountId, Integer.parseInt(args[2]));
    break;
   case "averageDailyBalance" :
    printAverageDailyBalance(accountId);
    break;
   default: break;
  }
 }

 private static void printAverageDailyBalance(String accountId) {
  String sql = String.format(AVERAGE_DAILY_BALANCE_QUERY, accountId);
  try (
    PreparedStatement s = _conn.prepareStatement(sql);
    ResultSet rs = s.executeQuery();
   ) {
   while (rs.next()) {
    //print the average daily balance results
   }
   } catch (SQLException e) {
    // handle exception, but no need for finally to close resources
    for (Throwable t : e.getSuppressed()) {
     System.out.println("Suppressed exception message is " + t.getMessage());
    }
  }
 }

 private static void printLastTransactions(String accountId, int numberOfTransactions) {
  List transactions = new ArrayList<>();
  //... handle fetching/printing transactions
 }

 private static void printBalance(String accountId) {
  try {
   BigDecimal balance = getBalance(accountId);
   //print balance
  } catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e) {
   System.err.println("Please see your local branch for help with your account.");
  }
 }

 private static void amIRich(String accountId) {
  try {
   BigDecimal balance = getBalance(accountId);
   //find out if the account holder is rich
  } catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e) {
   System.out.println("Please see your local branch for help with your account.");
  }
 }

 private static BigDecimal getBalance(String acccountId)
 throws AccountFrozenException, AccountClosedException, ComplianceViolationException {
  //... getBalance functionality
 }

}

简要地说,我们的ProjectCoinBanker类演示了以下Project Coin功能的基本用法。

  • 数字文字下划线
  • 开关中的弦
  • 多渔获
  • 用于创建类型化对象的类型推断
  • 尝试使用资源和抑制的异常

首先,数字文字中的下划线很容易解释。 我们的例子

private static final Integer ONE_MILLION = 1_000_000;

表明好处是视觉的。 开发人员可以快速查看代码以验证值是否符合预期。 下划线可以在自然分组位置以外的其他地方使用,无论放置在何处。 数字文字中的下划线不能以数字文字开头或结尾,否则,您可以随意将它们放在所需的位置。 尽管此处未进行演示,但还添加了二进制文字支持。 与十六进制文字以0x或0X前缀相同的方式,二进制文字将以0b或0B前缀。

开关中的字符串也是不言自明的。 现在,switch语句也接受String。 在我们的示例中,我们打开传递给main方法的String参数来确定发出了什么请求。 附带说明,这纯粹是一个编译器实现,带有指示,可能会在以后添加JVM对String的支持。

类型推断是另一个易于理解的改进。 现在代替我们的旧代码

List<Transaction> transactions = new ArrayList<Transaction>();

我们可以做

List<Transaction> transactions = new ArrayList<>();

因为可以推断类型。 自从引入泛型以来,可能找不到任何人会辩称不应该这样做,但是现在就在这里。

多次捕获对于异常处理代码的简洁性来说非常有用。 想要实际基于抛出的异常类型来做某事的次数太多了,直到现在,我们被迫拥有多个catch块,它们基本上都在做同一件事。 新语法非常干净和合乎逻辑。 我们的例子

catch (AccountFrozenException | ComplianceViolationException | AccountClosedException e)

显示了如何轻松完成。

最后,Project Coin功能的最后一个演示是尝试使用资源语法并支持检索抑制的异常。 引入了一个新的接口AutoCloseable ,该接口已应用于所有预期的可疑对象,包括Input / OutputStreams,读取器/编写器,通道,套接字,选择器和java.sql资源Statement,ResultSet和Connection。 在我看来,语法不像多捕获更改那样自然,并不是说我有其他选择。

try (
        PreparedStatement s = _conn.prepareStatement(sql);
        ResultSet rs = s.executeQuery();
        ) {
     while (rs.next()) {
       //print the average daily balance results
            }
 } catch (SQLException e) {
     //handle exception, but no need for finally to close resources
            for (Throwable t : e.getSuppressed()) {
         System.out.println("Suppressed exception message is " + t.getMessage());
     }
 }

首先,我们看到可以在尝试使用资源时包含多个资源-非常好。 我们甚至可以在与PreparedStatement相同的块中引用先前声明的资源。 我们仍然可以处理我们的异常,但是我们不需要关闭finally块来关闭资源。 还要注意, Throwable上有一个新方法getSuppressed() 。 这使我们可以访问试图“自动关闭”声明的资源时抛出的所有异常。 每个声明的资源最多可以有一个抑制的异常。 注意:如果资源初始化引发异常,它将在声明的catch块中处理。

而已。 没有什么破天荒的事情,但是我们可以不用太多麻烦就可以开始使用的一些简单增强功能。 Project Coin还包括有关varargs和编译器警告的功能。 本质上,它归结为一个新的注释(@SafeVarargs),可以在方法声明中应用该注释,以允许开发人员从其使用的代码中删除@SuppressWarnings(“ varargs”)。 这已应用于JDK中的所有关键可疑对象,但是在任何通用varags方法中都可以使用相同的注释。

在线描述的项目代币功能集充其量是不一致的。 希望这会给您关于JDK 7提案中可以使用的内容的完整摘要。

参考: JCG合作伙伴的 Java 7 –项目硬币功能概述 Carfey Software Blog上

相关文章 :

翻译自: https://www.javacodegeeks.com/2011/11/java-7-feature-overview.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值