忘记番石榴:5个Google库Java开发人员应该知道的

什么是最有用但未知的Google Java库?

如果我们在激烈的黑客马拉松中阻止某人并要求她命名一个受欢迎的Google Java库,那么答案可能就是Guava。 这也就不足为奇了,因为它的主要重点是提高开发人员的生产力。 但是其他Google图书馆呢? 您有机会检查一下吗?

在下面的文章中,我们将介绍一些来自Google的有趣的Java库,并向您介绍如何使用它们。

向混合物中添加另一个库

首先,我们要明确一点:我们爱番石榴。 它包含Google的一些基于Java的项目的核心库,例如集合,缓存,通用注释,I / O等。 这些不仅对Google开发人员有用,而且对更广泛的社区也有用。

尽管它不是Google唯一的好东西。 我们不是在谈论无人驾驶汽车,谷歌光纤或Ara项目(并且我们仍在等待最后一个)–我们是在谈论更多的图书馆

好消息是,因为我们为您做到了这一点,所以无需梳理每个可用的库即可找到合适的库。 我们选择了5个Google库,这些库可以使您的生活更轻松,并且代码更美观。 去看一下:

Guice是Java的轻量级依赖注入(DI)框架,其作用类似于Spring的核心控制反转(IOC)库。 它几乎和番石榴一样流行 。 如果您不熟悉它,Guice可以简化工厂的需求,并简化代码中“ new”的使用。 用Google自己的话来说,Guice @Inject是新的。

尽管该库不会使您免于编写工厂,但它将有助于确保您的代码不直接依赖于它们。 这样,更改,单元测试和重用代码将变得更加容易。

酷因素

该库旨在使开发和调试更加轻松快捷。 该文档甚至声称可以帮助您更好地理解代码。 Guice提供的另一个很棒的功能是在发生错误时生成有用的消息,因此您将了解发生了什么以及如何解决。

这个开源库是Java的静态分析工具,使您可以在编译时捕获常见的编程错误。 您可以成为团队中最好的开发人员,但是您或您的一位同事可能被最新的《权力的游戏》情节所吸引,并犯了一个错误。

换句话说,此工具将帮助您在错误变成生产错误并弄乱您的应用程序之前发现错误。

例如,它可以检测到的错误模式之一是CannotMockFinalClass –表示Mockito无法模拟最终类:

import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.mockito.Mock;
import org.mockito.Mockito;/*** Test for CannotMockFinalClass.*/
@RunWith(JUnit4.class)
public class CannotMockFinalClassPositiveCases {static final class FinalClass {}// BUG: Diagnostic contains: Mockito cannot mock@Mock FinalClass impossible;public void method() {// BUG: Diagnostic contains: Mockito cannot mockFinalClass local = Mockito.mock(FinalClass.class);}
}

酷因素

在官方库页面上,您会找到常见错误及其建议修复的列表。 这意味着每个错误都有别人已经想到的解决方案,您可以在自己的代码中轻松实现它。 顺便说一句,如果您对常见的生产错误感兴趣,请查看我们对生产中十大异常类型的分析 。

真理是一个测试框架,旨在帮助您的测试和错误消息更具可读性和可发现性。 它会生成有意义的错误消息,以报告测试失败的原因,同时可扩展到新类型的对象。 哦,它附带了一个很棒的口号:“我们已将失败作为策略”。

您可以使用Truth代替JUnit的断言,FEST或Hamcrest的matchers类,或者只是以您认为适合于代码的方式使用它。 它为您提供一个测试动词,该动词对一个主语,该值或被测对象进行断言。

您可以使用Truth来声明JUnit样式的假设(并跳过失败测试),断言和异常。

import static com.google.common.truth.Truth.assertThat;Set < Foo > foo = ...;
assertThat(foo).isEmpty()org.truth0.FailureStrategy$ThrowableAssertionError: Not true that is empty
at org.truth0.FailureStrategy.fail(FailureStrategy.java: 33)...

Kythe提供并支持工具和标准,以鼓励操纵源代码的程序之间的互操作性(在系统之间共享,交换和使用信息)。 一种更简单的解释方法是说该库为构建可与源代码一起使用的工具提供了一个生态系统。

该库的主要目标是提供一种可与任何源代码一起使用的,与语言无关的标准交换机制。 它包括构建系统,编译器,解释器,静态分析,编辑器,代码审查应用程序等。 这样,您就可以与任何其他系统共享信息。

酷因素

Kythe拥有一个丰富的社区 ,可以回答您的任何问题。 在Python,JavaScript或Java上需要Kythe的帮助吗? 想知道如何为Python模块建模吗? 还是您只是想知道Kythe的发音 ? 只是问社区。

Protobuf(也称为协议缓冲区)库是Google的语言无关,平台无关且可扩展的机制,用于序列化结构化数据。 如果您不确定这是什么意思,Google会说它就像XML,只是更小,更快和更简单。

如果我们必须为此库选择一个标语,则它可能是“一次构造,可在任何地方使用”,这是描述它的最佳方法。 一旦定义了数据的结构方式,就可以使用生成的特殊源代码从多种数据流和多种语言中进行读写。

酷因素

此处有完整的披露要求:protobuf是Takipi上我们最喜欢的库之一 ,我们可以保证它会帮助您简化复杂的元素。

我们有没有忘记任何人?

我们知道您在想什么-这么多的库,一个字都没有关于GWT 。 GWT是用于基于浏览器的应用程序的开发工具包,即使JavaScript不是您的最佳选择,它也可以创建高性能的Web应用程序。 它基本上是Java到JavaScript的编译器。

这个免费的开放源代码库由于使用了许多Google产品而变得流行。 该列表包括Google Inbox,AdWords,AdSense,航班,酒店搜索器,优惠,电子钱包和Blogger,这些都是Google出名的,功能强大的产品。

除了Google之外,还有一些使用GWT的知名公司,例如Ruxit,Go Grid,Whirled等。

其他Google库

在对Twitter进行评论之后,我们决定添加2个在此未提及的有用的库,谢谢@ joschi83 !

1. AutoValue –代码生成器的集合,可自动生成重复的Java代码。

2. GSON –流行的Java序列化/反序列化库,可以将Java对象转换为JSON并返回。

最后的想法

有很多Java库可以帮助您的代码并使代码更智能,更易于使用。 您所要做的就是了解您要查找的内容,并查看某个库如何提供帮助。

如果您是Guava的忠实粉丝,但在其他库中找不到任何有用的东西,则应查看每个开发人员都可以使用的Google Guava鲜为人知的一些功能 。

翻译自: https://www.javacodegeeks.com/2016/07/forget-guava-5-google-libraries-java-developers-know.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS在win32平台与mysql链接_mysql5.5.28-win32 + qt--4.8.2-vs2008 数据库驱动编译与连接...

我们来编译配置qt的mysql数据库驱动&#xff0c;首先看看官方文档的说明&#xff0c;如下How to Build the QMYSQL Plugin on WindowsYou need to get the MySQL installation files.RunSETUP.EXEand choose "Custom Install".Install the "Libs & Include …

JAVA知识学习——类的修饰符

Java程序在定义类时&#xff0c;除了使用class关键字标识之外&#xff0c;还可以在class之前增加若干类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和非访问控制符两大类。修饰符之间的先后排列次序对类的性质没有任何影响。一&#xff0c;非访问修饰符。 1…

神秘的数组初始化_I / O神秘化

神秘的数组初始化由于对高度可扩展的服务器设计的所有炒作以及对Node.js的狂热&#xff0c;我一直想重点研究IO设计模式&#xff0c;直到现在为止都没有足够的时间进行投资。 现在已经做了一些研究&#xff0c;我认为最好记下我遇到的东西&#xff0c;作为对我以及可能遇到这篇…

mysql characteristic_MySQL存储过程定义中的特性(characteristic)的含义

MySQL的存储过程蛮啰嗦的&#xff0c;与MSSQL或者Oracle的存储过程相比&#xff0c;如果没有显式指定&#xff0c;他会隐含地指定一系列特性(characteristic)的默认值来创建存储过程通常在使用图形界面工具进行存储过程编写的时候&#xff0c;图形界面工具会自动加上这部分内容…

hive 案例分析

转自 http://www.cnblogs.com/guanhao/p/5641675.html 1. 创建数据库&#xff0c;切换数据库 create database testdb2; use testdb2; 2. 创建管理表 create table emp( empno int, empname string, job string, mgr int, hiredate string, salary double, comm double, deptn…

BeanUtils包的使用

BeanUtils工具包是由Apache公司所开发&#xff0c;主要是方便程序员对Bean类能够进行简便的操作。 在使用BeanUtils工具包之前我们需要的Jar包有以下几种&#xff1a; (1) BeanUtils相关包 commons-beanutils-1.8.3.jar commons-beanutils-1.8.3-javadoc.jar commons-beanuti…

使用JMX作为Ganglia的现代替代品进行CLDB监视

有许多选项可用于监视MapR集群的性能和运行状况。 在本文中&#xff0c;我将介绍使用Java管理扩展&#xff08;JMX&#xff09;监视CLDB的鲜为人知的方法。 据最受尊敬的MapR数据工程师之一&#xff0c;Akihiko Kusanagi称&#xff0c;与使用Ganglia相比&#xff0c;使用JMX来…

python 多线程并发怎么还是顺序执行_python thread 并发且顺序运行示例

python怎么实现用多线程顺序执行python 的GIL规定每个时刻只能有一个线程访问python虚拟机,所以你要用python的多线程来做计算是很不合算的,但是对于IO密集型的应用,例如网络交互来说,自己把自己说服了&#xff0c;是一种理智的胜利&#xff1b;自己被自己感动了&#xff0c;是…

markdown pad激活

<iframe src"https://cn.calcuworld.com/%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6%e8%ae%a1%e7%ae%97%e5%99%a8?iframe1" width"100%" height"400"></iframe> ---恢复内容开始--- 注册码 Soar360live.com GBPduHjWfJU1mZqcPM3BikjYKF…

Java 文件上传组件 Apache Commons FileUpload 应用指南(二)——FileUpload如何工作?

在最初的 http 协议中&#xff0c;没有上传文件方面的功能。RFC1867&#xff08;"Form-based File Upload in HTML".&#xff09; 为 http 协议添加了这个功能。客户端的浏览器&#xff0c;如 Microsoft IE, Mozila, Opera 等&#xff0c;按照此规范将用 户指定的文件…

pytest单侧模块_入门汇总

Pytest简单介绍 &#xff08;pytest是python的一个测试框架&#xff0c;主要是用来进行一些小的测试&#xff09; 安装&#xff1a;pip install -U pytest查看是否安装成功&#xff1a;pytest --version运行&#xff1a;在当前文件所在目录下执行pytest&#xff0c;会寻找当前目…

pythonreshape函数三个参数_详解numpy.ndarray.reshape()函数的参数问题

我们知道numpy.ndarray.reshape()是用来改变numpy数组的形状的&#xff0c;但是它的参数会有一些特殊的用法&#xff0c;这里我们进一步说明一下。代码如下&#xff1a;import numpy as npclass Debug:def __init__(self):self.array1 np.ones(6)def mainProgram(self):print(…

javafx 和swing_集成JavaFX和Swing

javafx 和swing我刚刚完成了对使用Swing的应用程序组件的重写&#xff0c;现在正在使用JavaFX&#xff0c;最后得到了与更大的swing应用程序集成的JavaFX组件。 这是一个很大的应用程序&#xff0c;重写花了我一段时间&#xff0c;最后一切都很好&#xff0c;我很高兴自己做到了…

servlet.jar--jar not loaded错误

出错信息&#xff1a;validateJarFile(D:\Program Files\apache-tomcat-6.0.29\webapps\BookShop\WEB-INF\lib\servlet.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 造成这种错误的原因有两个&#xff1a;serv…

练习6.6

6.6&#xff1a;说明形参、局部变量以及局部静态变量的区别。编写一个函数&#xff0c;同时用到这三种形式。 Ans&#xff1a;形参及函数体内定义的变量&#xff0c;都是局部变量&#xff0c;必须进行初始化&#xff0c;否则会出现未定义行为&#xff0c;这是由于局部变量的生命…

java map 最大值_MAP集合选出最大值

import java.util.Arrays;import java.util.HashMap;import java.util.Map;import org.junit.Test;public class TestHashMap {//统计各空气质量的最高值Testpublic void test1(){String pm25 "农展馆423,东四378,丰台花园406,天坛322,海淀区万柳398," "官园40…

Apache Hadoop HDFS数据节点Apache Mesos框架

介绍 该项目允许在Mesos上运行HDFS。 您应该熟悉HDFS和Mesos基础知识&#xff1a; http://mesos.apache.org/documentation/latest/ https://hadoop.apache.org/docs/r2.7.2/hdfs_design.html 项目要求&#xff1a; Mesos 0.23.0 JDK 1.7.x Hadoop 1.2.x或2.7.x 流浪汉 …

java byte 转 c_C 和 Java 之间的byte数据的转换问题

C语言里通常可能开发人员直接定义struct 作为数据包,因此在java客户端接收struct 中的数据时候,受整数等类型的高低位存放的影响,需要进行相应的转换,参考:转换代码如下:package com.lizongbo.util;/**** Title: 数字转换工具类** Description: 将数字类型与byte数组互相转换**…

MyEclipse中如何设置 jdk 和 jre 编译运行环境

MyEclipse设置JDK和JRE具体的应用版本其实很简单&#xff0c;分为三种状况&#xff1a; 1、设置默认使用的JDK和JRE环境。 具体步骤&#xff1a;菜单window-preferences-java-Installed JRES。 点中了&#xff0c;右边的窗口点ADD按钮&#xff0c;记住选择添加安装了Java目录下…

dubbo集群服务下一台服务挂了对服务调用的影响

一、问题描述&#xff1a;项目中2台dubbo服务给移动端提供查询接口&#xff0c;移动端反应说查询时而很快(秒刷)&#xff0c;时而很慢(4-5秒)。 二、问题分析&#xff1a; 1、问题猜想&#xff1a;网络不稳定原因导致&#xff0c;但是切换公司wifi和手机4G,问题依旧存在。说明问…