最近在看Google Guava库的源码,为什么会看这个库的源码呢?不做解释。
这个项目包含了一些Google的核心Java1.5+类库,这些类库已经被应用在Google许多基于Java的项目中。包括:
- com.google.common.annotations
- com.google.common.base
- com.google.common.collect
- com.google.common.io
- com.google.common.net
- com.google.common.primitives
- com.google.common.util.concurren
我大致是按照包的顺序来看的,因为时间的关系有时也会先看小一点的包,包内的顺序会根据类之间的调用做相应调整。因为网上Guava的中文资料实在太少了,所以看源码的时候根据注释和个人的理解稍微记了下笔记,给大家提供一点参考。目前水平有限,很多地方理解可能不够深入,遇到不足或错误的地方,请各位大牛多多指正!
这个类库比较大,所以将会分几篇日志来写,目前的计划是这样的:
- com.google.common.annotations
- com.google.common.base(预算是分为两篇)
- com.google.common.net
- com.google.common.primitives
- com.google.common.collect(预算是分为两篇,不够就再加,这个包实在是太大了...以前是一个独立的项目Google Collections,后来加到Guava中了,只用了一个包,坑爹啊)
- com.google.common.io(预算是分为两篇)
- com.google.common.util.concurrent(预算是分为两篇)
现在开始正文,annotations:提供了常用的注释类型。
以下是java中annotations的相关知识,从网上找到的,引自:http://www.iteye.com/topic/171412,感谢lingzantia。
注释类是实现
java.lang.annotation.Annotation接口的类,用于向程序分析工具或虚拟机提供注释信息,它和一般的类在定义和使用方式上有所不同。
注释类的一般形式是:
public @interface
MyAnnotation {
String value() default
"hello world";
}
它等价于下面的类:
public class MyAnnotation
implements java.lang.annotation.Annotation {
private String value =
"hello world";
public void
setValue(String value) {
this.value =
value;
}
public String
getValue() {
return value;
}
}
注释类的使用方法如下:
@MyAnnotation(value="hello")
Method
method = AnnotationTest.class.getMethod("doSomething",
null);//
获取被注释方法
MyAnnotation
annotation = method.getAnnotation(MyAnnotation .class);//
获取注释对象
String value =
annotation.value();
@interface
表示该类是注释类,定义注释类时不能再继承或实现其它类。
java.lang.annocation
包中常用的
class
有:接口
Annotation
、枚举类型
ElementType
和
RetentionPolicy
、注释类
Documented
、
Inherited
、
Retention
和
Target
。
public enum RetentionPolicy {
SOURCE, //编译器处理完
Annotation后不存储在
class中
CLASS,
//编译器把
Annotation存储在
class中,这是默认值
RUNTIME
//编译器把
Annotation存储在
class中,可以由虚拟机读取,反射需要
}
public enum
ElementType {
TYPE, //指定适用点为
class,
interface, enum
FIELD, //指定适用点为
field
METHOD, //指定适用点为
method
PARAMETER, //指定适用点为
method的
parameter
CONSTRUCTOR, //指定适用点为
constructor
LOCAL_VARIABLE, //指定使用点为局部变量
ANNOTATION_TYPE, //指定适用点为
annotation类型
PACKAGE //指定适用点为
package
}
java.lang.annotation.Documented用于指定该
Annotation是否可以写入
javadoc中
.
java.lang.annotation.Inherited用于指定该
Annotation用于父类时是否能够被子类继承
.
示例如下:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Documented
//这个
Annotation可以被写入
javadoc
@Inherited //这个
Annotation可以被继承
//表示这个
Annotation只能用于注释构造子和方法
@Target({ElementType.CONSTRUCTOR,ElementType.METHOD})
@Retention(RetentionPolicy.CLASS) //表示这个
Annotation存入
class但
vm不读取
public @interface MyAnnotation {
String value() default "hahaha";
}
java.lang.reflect.AnnotatedElement接口提供了以下四个方法来访问注释:
public Annotation getAnnotation(Class annotationType);
public Annotation[] getAnnotations();
public Annotation[] getDeclaredAnnotations();
public boolean isAnnotationPresent(Class annotationType);
Class、
Constructor、
Field、
Method、
Package等都实现了该接口
,可以通过这些方法访问
Annotation信息
,前提是要访问的
Annotation指定
Retention为
RUNTIME.
Java内置的
annotation有
Override
Deprecated SuppressWarnings.
Override只用于方法
,它指明注释的方法重写父类的方法
,如果不是
,则编译器报错
.
Deprecated指明该方法不建议使用
SuppressWarnings告诉编译器
:我知道我的代码没问题
,你不用吓我了
,我不怕的
^_^
这些都是
Mark
Annotation,名称本身就包含了要提供的信息
,不需要额外提供
.
1.1 Beta:这个注释使得被注释的
API受不希望的改变的影响,甚至是删除操作。
如果一个
API有
Beta注释,将不再遵守它所在的类库的约定。
Retention为
class,
Target为类型、构造函数、域、方法、类型,标记为
Documented和
GwtCompatible。
是标记注释,不需要给出说明。
1.2 GwtCompatible:这个注释要求被注释的
method返回类型是与
GWT兼容的。用于
type时表示希望该类型的所有方法返回类型是与
GWT兼容的。常用于指示工厂方法创建的实例类型是
GWT可序列化类型。
Retention为
class,
Target为类型和方法,标记为
Documented。
是标记注释,不需要给出说明。
1.3 GwtIncompatible:这个注释表示被注释的
type、
method或
field不能用于
GWT,即便它们所在的类型被注释为
GwtCompatible或者可以在
GWT中被访问。在
GWT中使用被
GwtIncompatible注释的
method或
field时会引起编译错误或抛出异常。
Retention为
class,
Target为
type、
method和
field,标记为
Documented。
是非标记注释,需要描述被注释对象与
GWT不兼容的原因。一般情况下,简单的引用
GWT不支持的类型或方法就足够了,例如:
@GwtIncompatible
Class.isInstance。
1.4 VisibleForTesting:这个注释表示被注释的
type或
member可以被测试。标记为
GwtCompatible。是标记注释,不需要给出说明。
以上。
分享到:
相关推荐
├─Google Guava 第20讲-实战:手动实现一个EventBus-01快速搭建程序结构.wmv ├─Google Guava 第21讲-实战:手动实现一个EventBus-02快速实现程序功能.wmv ├─Google Guava 第22讲-实战:手动实现一个EventBus...
Google Guava 是一个广泛使用的 Java 库,它提供了一系列现代编程实用工具,旨在简化常见的编程任务。Guava 提供了集合框架的扩展、并发支持、缓存机制、字符串处理工具、I/O 工具以及许多其他功能。这个官方教程将...
在IT行业中,Google Guava库是一个非常强大的工具集,它为Java开发人员提供了一系列实用的集合、缓存、并发和I/O工具。本篇文章将详细探讨如何利用Guava库实现定时缓存功能,以提高应用的性能和效率。 首先,Guava...
Google Guava是由Google提供的一个开源项目,它包含了一组Java库,旨在简化Java编程。Guava库提供了包括集合、缓存、原生类型支持、并发库、通用注解、字符串处理、I/O等丰富功能,这些功能使得Java核心库的使用更加...
Google Guava是Google开发的一个开源Java库,它包含了一系列高级且实用的集合类、缓存机制、并发工具、字符串处理、I/O工具等,极大地提升了Java开发者的工作效率。Guava的目标是通过提供一系列现代实用工具,帮助...
谷歌的Guava库是Java开发中的一个非常重要的开源项目,它提供了一系列的高效、实用的工具类,大大简化了常见的编程任务。Guava的核心特性包括集合框架、缓存、原生类型支持、并发库、字符串处理、I/O操作等。这个...
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...
Google Guava库是由Google开发的一个开源项目,旨在提供Java开发中常用的基础功能。它的目标是简化Java编程,为开发者提供更加清晰、高效的代码编写方式。通过使用Guava库,开发者可以不必在每次项目中重复编写相同...
Google Guava 是一个开源库,为Java开发人员提供了一组核心库,包括集合、缓存、并发工具、I/O工具、字符串处理、实用方法等。这个官方教程主要针对Guava库的使用进行详细介绍,帮助开发者更有效地利用Guava来优化...
Google Guava是一个由Google开发并维护的开源Java库,它为Java开发者提供了许多实用的工具类和集合框架,极大地简化了常见的编程任务。这个框架包含了多个模块,如基础(base)、缓存(cache)、I/O(io)以及并发...
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你...
标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Guava是一种基于开源的Java库,其中包含谷歌正在由他们很多项目使用的很多核心库。这个库是为了方便编码,并减少编码错误。这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法...
Google Guava 是一个广泛使用的开源库,为Java开发人员提供了一系列实用工具类和集合框架。这个库旨在简化常见的编程任务,提高代码的可读性和可维护性。Guava 提供了丰富的功能,包括缓存、并发工具、原生类型支持...
在Java编程中,Google Guava库是一个不可或缺的工具集合,它提供了大量的高效、实用的类和方法,极大地提升了开发效率。本次我们将聚焦于Guava中的`Ints`模块,通过分析`com.google.guava_1.6.0.jar.zip`这个压缩包...
谷歌Guava,全称为Google Guava,是Google推出的一款Java库,它包含一系列基础工具类,旨在简化Java开发工作,提高代码效率和可维护性。Guava的核心特性包括集合框架、缓存、原始类型支持、并发库、字符串处理、I/O...
Google Guava 是一个由Google提供的开源Java库,它包含了许多强大的工具类和集合类,这些类可以帮助开发者更高效地编写Java代码。Guava的目标是提供一种更加简洁、优雅的方式来处理常见的编程任务,并且在很多情况下...
谷歌Guava库是一个广泛使用的Java库,它提供了许多核心库的实用工具类,包括集合、缓存、并发、I/O、字符串处理、泛型 utilities、错误处理、网络、数学运算以及类加载器支持等多个方面。Guava的目标是使Java编程...
Google Guava 官方教程 v1.1 2018-07-22 https://github.com/tianbian224/GuavaLearning/blob/master/Google%20Guava%20%E5%AE%98%E6%96%B9%E6%95%99%E7%A8%8B%20-%20v1.1.pdf
Google Guava 是一个由 Google 开发的 Java 库,它提供了许多基础工具,包括集合、缓存、原生类型支持、并发库、字符串处理、I/O 等等。在版本 30.1.1 中,Guava 继续提供了一系列强大且实用的类,帮助开发者更高效...