一、简单介绍
Attribute接口是一个空接口;
AttributeImpl也继承Attribute接口;
根据源码是:记录对象的属性,但是不包含静态属性
对于一些属性是Attribute是接口,然后AttributeImpl去实现接口。
例如:OffsetAttribute 和 OffsetAttributeImpl
二、简单源码分析
public abstract class AttributeImpl implements Cloneable, Attribute { /* * 抽象有两个方法一个clean方法一个copyTo方法 但是copy方法返回是一个void?说明修改后直接改变的还是对象内容。 */ public abstract void clear(); public abstract void copyTo(AttributeImpl target); /* * 这个方法好奇怪,下面的方法调用居然根据这个变量来处理 */ public final String reflectAsString(final boolean prependAttClass) { /* * *StringBuild 没线程安全 效率更高 *StringBuffer 线程安全 * */ final StringBuilder buffer = new StringBuilder(); /* * AttributeReflector是一个接口里面只有一个方法。 * * AttributeReflector(接口,字段属性《剔除静态的》,值); */ reflectWith(new AttributeReflector() { @Override public void reflect(Class<? extends Attribute> attClass, String key, Object value) { if (buffer.length() > 0) { buffer.append(','); } /* * 如果是false的话类名不用添加了 */ if (prependAttClass) { buffer.append(attClass.getName()).append('#'); } /* * buffer添加字符串key=对于value为空null否则就添加value */ buffer.append(key).append('=') .append((value == null) ? "null" : value); } }); return buffer.toString(); } public void reflectWith(AttributeReflector reflector) { // 得到Class也就是反射了 final Class<? extends AttributeImpl> clazz = this.getClass(); // 通过AttributeSource得到 从字面意思是得到所有的接口 final LinkedList<WeakReference<Class<? extends Attribute>>> interfaces = AttributeSource .getAttributeInterfaces(clazz); // 如果没接口抛出异常 if (interfaces.size() != 1) { throw new UnsupportedOperationException( clazz.getName() + " implements more than one Attribute interface, the default reflectWith() implementation cannot handle this."); } // 下面应该是得到第一个接口?但是是为什么那?只得到第一个哪? final Class<? extends Attribute> interf = interfaces.getFirst().get(); final Field[] fields = clazz.getDeclaredFields(); try { for (int i = 0; i < fields.length; i++) { final Field f = fields[i]; // 得到所有的属性,但是静态属性就去掉了 if (Modifier.isStatic(f.getModifiers())) continue; f.setAccessible(true); reflector.reflect(interf, f.getName(), f.get(this)); } } catch (IllegalAccessException e) { // this should never happen, because we're just accessing fields // from 'this' throw new RuntimeException(e); } } /* * 返回一个克隆的对象 */ @Override public AttributeImpl clone() { AttributeImpl clone = null; try { clone = (AttributeImpl) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); // shouldn't happen } return clone; } }
相关推荐
《深入剖析Lucene.NET 2.9.1:源码解析与应用开发》 Lucene.NET 2.9.1是开源搜索引擎库Lucene的.NET版本,它为.NET开发者提供了强大的全文检索和索引功能。这个版本的源码提供了一个宝贵的资源,帮助我们理解其内部...
《深入剖析Lucene华电项目源码》 在IT领域,搜索引擎技术是不可或缺的一部分,而Apache Lucene作为一款开源的全文检索库,被广泛应用在各种信息检索系统中。本文将结合“lucene 华电项目 源码”,深度解析Lucene的...
现在我们拥有《Lucene in Action》的源码,这为我们提供了探索和学习Lucene的宝贵资源。 首先,Lucene是一个高性能、全文本搜索库,由Java编写,广泛应用于各种搜索应用场景,包括网站搜索、文档检索、日志分析等。...
Lucene是Java领域内最受欢迎的全文检索框架之一,其核心功能包括文本索引和查询。在理解Lucene的工作机制之前,我们需要了解全文检索的基本原理。 - **索引构建**:这是全文检索的第一步,涉及到将文档内容转换为可...
本压缩包包含的是Lucene 3.5.0版本的全部源码,对于想要深入理解Lucene工作原理、进行二次开发或者进行搜索引擎相关研究的开发者来说,是一份非常宝贵的学习资源。 Lucene 3.5.0是Lucene的一个重要版本,它在3.x...
**Lucene.Net 2.3 源码详解** Lucene.Net 是 Apache Lucene 的 .NET 实现,它是一个高性能、全文本搜索库,适用于 .NET 开发者。这个版本是 2.3,是最新的版本,包含了丰富的功能和优化。通过分析其源码,我们可以...
**Lucene.Net 2.9.2 源码包详解** Lucene.Net 是一个开源全文搜索引擎库,它是 Apache Lucene 的 .NET 版本,为 .NET 开发人员提供了强大的搜索功能。Lucene.Net 2.9.2 版本是这个项目的其中一个稳定版本,提供了对...
《深入剖析Lucene:从源码到实践》 Lucene是一个高性能、全文本搜索库,由Apache软件基金会开发,主要用于构建搜索引擎。它提供了一个简单但功能强大的API,使得开发者能够轻松地在应用中实现文本检索功能。Lucene...
本人用ant idea命令花了214分钟,35秒编译的lucene-solr源码,可以用idea打开,把项目放在D:\space\study\java\lucene-solr路径下,再用idea打开就行了
通过实践项目,如构建一个简单的搜索引擎或集成Lucene到现有应用中,可以更深入地理解其工作原理。在实践中,会遇到如数据导入、更新、删除等问题,解决这些问题有助于提升开发者的Lucene应用能力。 总结,Lucene 5...
《深入剖析Lucene 4.10.3源码》 Apache Lucene是一个高性能、全文检索库,它为Java开发者提供了强大的文本搜索功能。在Windows系统下,虽然官方并未直接提供源码,但通过从Linux系统下提取,我们得以一窥Lucene ...
在这个压缩包中,你将获得Lucene 2.3.2版本的全部源码,这将有助于深入理解其内部工作原理以及进行自定义开发。 源码分析: Lucene 的源码分为几个主要部分,包括分析(Analyzer)、索引(Index)、查询(Query)、...
源码的提供使得读者可以更直观地理解Lucene的工作原理,这对于学习和开发基于Lucene的搜索应用非常有帮助。以下是根据标题、描述以及压缩包中的文件名称,对Lucene相关知识点的详细解释: 1. **Apache Lucene**:...
《深入剖析Lucene 5.0源码》 Lucene是一个高性能、全文检索库,它为Java开发者提供了在应用程序中实现全文检索功能的工具。在本文中,我们将深入探讨Lucene 5.0的源码,揭示其核心设计思想与工作原理,帮助读者更好...
《Lucene In Action 2源码》是针对著名图书《Lucene In Action 2nd Edition》的配套代码资源,这本书是关于Apache Lucene全文搜索引擎库的一部经典之作。Lucene是一个开源的Java库,用于构建高性能、可扩展的信息...
本文将围绕“lucene.net完整源码”进行深入探讨,包括其分词机制、盘古分词的使用以及搜索关键词的高亮显示。 首先,我们来看Lucene.NET的核心——分词。在信息检索领域,分词是构建索引的基础步骤,它将文本分解...
Lucene,作为一种全文搜索的辅助工具,为我们进行条件搜索,无论是像Google,Baidu之类的搜索引 擎,还是论坛中的搜索功能,还是其它C/S架构的搜索,都带来了极大的便利和比较高的效率。本文主要是利用Lucene对MS Sql...
Lucene 2.4.1的demo模块包含了一些简单的示例程序,可以帮助我们快速了解其工作原理。例如,“SimpleTextIndexWriter”和“SimpleTextIndexReader”可以演示如何创建索引和读取索引。 1. 首先,确保已选中demo模块...
《深入剖析Lucene全文检索案例源码》 在信息技术领域,全文检索技术是搜索引擎的核心,而Lucene作为Java平台上的一个开源全文检索库,被广泛应用于各种搜索应用中。本篇将围绕“lucene全文检索案例源码”展开,深入...