package com.cooliris.picasa;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.xml.sax.Attributes;
public abstract class Entry {
public static final String[] ID_PROJECTION = { "_id" };
// The primary key of the entry. by_zh
@Column("_id") //使用
public long id = 0;
@Retention(RetentionPolicy.RUNTIME) //使用失效。 注解存在于类文件中,而且在运行时虚拟机可以获取注解信息。 by_zh
@Target(ElementType.TYPE) //此注解只能用来对类、接口以及枚举类型进行注解 by_zh
public @interface Table {
String value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) //此注解只能用来对成员变量进行注解
public @interface Column {
String value(); //注解属性,value是获取此属性值的方法的名称。
boolean indexed() default false;
boolean fullText() default false;
}
public void clear() {
id = 0;
}
public void setPropertyFromXml(String uri, String localName, Attributes attrs, String content) {
throw new UnsupportedOperationException("Entry class does not support XML parsing");
}
}
private static final class PhotoProjection extends Entry {
public static final EntrySchema SCHEMA = new EntrySchema(PhotoProjection.class);
@Column("edit_uri")
public String editUri;
@Column("title")
public String title;
@Column("summary")
public String summary;
@Column("date_taken")
public long dateTaken;
@Column("latitude")
public double latitude;
@Column("longitude")
public double longitude;
@Column("thumbnail_url")
public String thumbnailUrl;
@Column("screennail_url")
public String screennailUrl;
@Column("content_url")
public String contentUrl;
@Column("content_type")
public String contentType;
@Column("html_page_url")
public String htmlPageUrl;
}
下面是在另一个类中使用注解:
private ColumnInfo[] parseColumnInfo(Class<? extends Object> clazz) {
// Gather metadata from each annotated field.
ArrayList<ColumnInfo> columns = new ArrayList<ColumnInfo>();
Field[] fields = clazz.getFields();
for (int i = 0; i != fields.length; ++i) {
// Get column metadata from the annotation.
Field field = fields[i];
Entry.Column info = ((AnnotatedElement) field).getAnnotation(Entry.Column.class);
if (info == null) {
continue;
}
// Determine the field type.
int type;
Class<?> fieldType = field.getType();
if (fieldType == String.class) {
type = TYPE_STRING;
} else if (fieldType == boolean.class) {
type = TYPE_BOOLEAN;
} else if (fieldType == short.class) {
type = TYPE_SHORT;
} else if (fieldType == int.class) {
type = TYPE_INT;
} else if (fieldType == long.class) {
type = TYPE_LONG;
} else if (fieldType == float.class) {
type = TYPE_FLOAT;
} else if (fieldType == double.class) {
type = TYPE_DOUBLE;
} else if (fieldType == byte[].class) {
type = TYPE_BLOB;
} else {
throw new IllegalArgumentException("Unsupported field type for column: " + fieldType.getName());
}
// Add the column to the array.
int index = columns.size();
columns.add(new ColumnInfo(info.value(), type, info.indexed(), info.fullText(), field, index)); //使用注解 by_zh
}
@Entry.Table("photos")
public final class PhotoEntry extends Entry {
public static final EntrySchema SCHEMA = new EntrySchema(PhotoEntry.class);
/**
* The user account that is the sync source for this entry. Must be set
* before insert/update.
*/
@Column("sync_account")
public String syncAccount;
/**
* The "edit" URI of the photo.
*/
@Column("edit_uri")
public String editUri;
...
...
}
分享到:
相关推荐
1. **Android注解库**:如`AndroidAnnotations`,它可以简化Android开发中的常见任务,如启动Activity、保存和恢复状态等。 2. **Lint检查**:`@SuppressLint`注解可以关闭Lint的特定警告,但通常应谨慎使用,因为...
在Android开发中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或者运行时环境用来执行特定的操作。`@Inject`注解通常与依赖注入框架如Dagger或Butter Knife关联,用于...
在Android开发中,自定义注解是一种非常有用的工具,它能帮助我们简化代码,提高可读性和可维护性。本文将深入探讨如何使用自定义注解来实现`findViewById`和`setOnClickListener`的功能,同时支持Activity和...
在Android开发中,注解(Annotations)是一种强大的工具,它能帮助我们简化代码,提高代码的可读性和可维护性。Android Annotations库是专门为Android应用设计的一个注解处理框架,它提供了一系列预定义的注解,可以...
在Android中,我们可以通过自定义注解来标记特定的UI组件,并在编译时或运行时解析这些注解,执行相应的操作。 1. **创建注解** 我们可以创建一个名为`BindView`的注解,用于标记需要初始化的View。这个注解通常...
在Android开发中,注解(Annotation)是一种强大的元数据,它可以提供有关代码的附加信息,而这些信息可以被编译器或运行时环境用来执行特定的任务。本篇将深入探讨如何仿照ThinkAndroid的方式实现注解标签,以及...
在Android开发中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的方式,这些信息可以被编译器或运行时环境用来执行特定的操作。注解类的使用极大地提高了代码的可读性和可维护性,同时也简化了依赖...
注解在Android开发中尤其重要,因为它们可以用于简化代码、提高可读性,以及实现编译时和运行时的自动处理。在Android开发中,自定义注解和注解处理器是两个关键概念,让我们深入探讨这两个主题。 首先,我们来看看...
本文将深入探讨Android注解的基本概念、种类、使用场景以及处理机制。 一、注解的基本概念 注解本质上是一种特殊的声明,它以`@`符号开头,后面跟着注解类型的名字。注解不会改变程序的语义,它们主要用于提供工具...
在Android开发中,自定义注解(Custom Annotation)是一种强大的工具,它可以帮助我们简化代码,提高可读性和可维护性。传统的Android应用开发过程中,我们经常需要通过`findViewById`方法来查找并绑定UI元素,这既...
应该都知道XUTILS中有这个控件注解。这边文章的作用是当你想用这个功能而不想用框架中的其他部分时,你可以使用内中方法。 http://blog.csdn.net/yangzhaomuma/article/details/51183110
在Android开发中,注解(Annotation)和反射(Reflection)是两种非常强大的工具,它们能够帮助开发者实现更灵活、高效且可维护的代码。本文将深入探讨如何利用这两种技术构建一个简单的Android框架,并阐述其主要...
Android AOP 注解是 Android 应用程序开发中的一种重要技术,它可以帮助开发者简化代码、提高效率、降低错误率。本文将详细介绍 Android AOP 注解的概念、原理、分类、使用方法、优点和缺点,以及简单的使用实例。 ...
Android中的注解是一种元数据,用于向编译器或构建工具提供有关代码的附加信息,而这些信息不会改变代码的行为。注解在Java中被广泛使用,而在Android开发中,它们同样扮演着重要的角色,提供了多种优势,例如提高...
在Android开发中,自定义注解是一种非常有用的工具,它能帮助我们简化代码,提高代码的可读性和可维护性。本示例“Android自定义注解实现View绑定Demo”旨在教你如何通过自定义注解来实现视图的自动绑定,从而避免...
在Android开发中,注解(Annotation)是一种强大的元数据工具,它允许开发者向代码中添加额外的信息,这些信息可以被编译器或者...通过深入学习和实践,你将能更好地掌握Android注解的精髓,并在实际开发中得心应手。
在Android开发中,注解(Annotation)是一种强大的元数据机制,可以用来在代码中嵌入信息,这些信息可以在编译时或运行时被处理。本文将深入探讨如何构建一个注解框架,帮助开发者提高代码的可维护性和可扩展性。 ...
在Android开发中,注解(Annotation)是一种强大的元数据,可以为代码添加额外的信息,而这些信息可以在编译时或运行时被解析和利用。ButterKnife是一款著名的Android视图绑定库,它通过注解简化了UI元素的绑定,...
Android Butter Knife注解框架是一款由Jake Wharton开发的Android库,它极大地简化了视图绑定的过程,让开发者从繁琐的findViewById()调用中解脱出来。这个框架的核心思想是使用Java注解来标识UI元素,然后通过编译...
在Android开发中,注解(Annotation)和反射(Reflection)是两个重要的概念,它们极大地提升了代码的可维护性、灵活性和动态性。本篇将详细阐述这两个知识点,并结合实际示例进行讲解。 **注解(Annotation)** 1...