首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅析ButterKnife

不过比较遗憾是你不能修改已经存在Java文件,比如在已经存在添加方法,所以通过Java Annotation Tool只能通过辅助类方式来实现View依赖注入,这样会略微增加项目的方法数和类数...,所有的解析结果都会存放在targetClassMap作为结果返回。...$L 这条语句来看,我们就知道为什么使 用BindView注解     * 变量不能为private了     */     CodeBlock.Builder builder...这个时候就需要用到android-apt这个插件了,使用它有两个目的: 允许配置只在编译时作为注解处理器依赖,而不添加到最后APK或library 设置源路径,使注解处理器生成代码能被Android...Studio正确引用 这里把使用ButterKnife时android-apt配置作为例子,在工程build.gradle添加android-apt插件 buildscript { repositories

85061

apt 与 JavaPoet 自动生成代码

当你在这个文件中新增一行配置时,内心是否心生抗拒,思考过这行配置是否可以不用人工来添加,让你从机械重复劳动解放出来呢?...TypeSpec、ParameterSpec、MethodSpecCodeBlock、JavaFile都是JavaPoet提供用于描述一个源文件元素类。...在apt_compiler model build.gradle添加如下配置: dependencies { compile fileTree(dir: 'libs', include:...如果在某轮process处理,process生成了新java文件,则apt编译器会将新生成java文件作为输入,然后收集到新被注解元素,直到不再产生新文件后,process循环调用结束。...TypeSpec、ParameterSpec、MethodSpecCodeBlock、JavaFile都是JavaPoet提供用于描述一个源文件元素类。

4.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

Java屠龙之术(二):如何方便快捷地生成.class文件

在之前“Java屠龙之术:如何修改语法树”,我们详细介绍了如何使用Javac源码提供工具类来修改语法树。...主要和注解配合用来干掉那些重复模板代码(butterknife 和databinding所做事情),当然你也可以使用这个技术让你代码更加炫酷。...下面由浅入深,循序渐进说明用法 方法&控制流: 添加方法 addcode 和 addstatement 对与无需类引入极简代码可以直接使用addCode MethodSpec main = MethodSpec.methodBuilder...就需要使用.addStatement来声明 更优雅流控制 beginControlFlow 流开启 addStatement 处理语句 endControlFlow()流结束 如上面的用流改写就是 MethodSpec...方法 方法修饰,Modifiers.ABSTRACT MethodSpec flux = MethodSpec.methodBuilder("flux") .addModifiers(Modifier.ABSTRACT

70550

何在keras添加自己优化器(adam等)

\Anaconda3\envs\tensorflow-gpu\Lib\site-packages\tensorflow\python\keras 3、找到keras目录下optimizers.py文件并添加自己优化器...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...super(Adamsss, self).get_config() return dict(list(base_config.items()) + list(config.items())) 然后修改之后优化器调用类添加我自己优化器...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

44.9K30

Javapoet源码解析

Javapoet:是生成.java源文件开源API github:https://github.com/square/javapoet 以生成一个HelloWrold.java文件为例: 1 package...,由此可以看到 Javapoet使用是建造者设计模式。...在内部类Builder应该有添加权限修饰符/注释/注解/变量等操作来构建一个类或者接口枚举 MethodSpec:A generated constructor or method declaration...并且这个Builder内部类同样包括添加权限修饰符/注释/注解等方法,另外方法有返回值,参数 Comment 语句来构建一个方法 同样原理,FieldSpec是对成员变量声明,而且里面也有一个可以返回当前对象...builder静态内部类,在这个builder同样有添加注释注解访问修饰符等操作,来构建一个变量。

89020

ButterKnife源码分析

PS:ButterKnife 使用了 JavaPoet 来生成 Java 源码。如果对 JavaPoet 不太熟悉,可以先阅读这篇文章 《javapoet——让你从重复无聊代码解放出来》 。...若校验通过之后,生成该 element 所在类元素对应 builder ,builder 添加相应 Field 绑定信息,最后添加到待 unbind 序列中去。...MethodSpec createBindingConstructor(TypeName targetType, int sdk) { // 创建构造方法,方法修饰符为 public ,并且添加注解为...形式,所以属性肯定是不能 private CodeBlock.Builder builder = CodeBlock.builder() .add(...~~ 0x07 References 浅析ButterKnife 深入理解 ButterKnife,让你程序学会写代码 公共技术点之 Java 注解 Annotation javapoet——让你从重复无聊代码解放出来

32420

聊聊AbstractProcessor和Java编译流程

我:AbstractProcessor只能处理注解,然后根据注解通过javapoet生成一个新java类。...在每一轮,可以向处理器询问process在前一轮产生源文件和类文件上找到注释子集。 第一轮处理输入是工具运行初始输入; 这些初始输入可以被视为虚拟第0轮处理输出。...静态方法 MethodSpec.Builder initMethod = MethodSpec.methodBuilder("init") .addModifiers...缺点和总结 缺点:apt能做事情还是比较有限 javapoet只能新增一个类,而不能对当前类进行更改。...一部分abtest赋值操作其实也可以用同样方式去调整。 但是把有些东西一旦深入了,还是有很多难点和痛点需要我们去解决。偶尔造个火箭其实也还蛮香

4.4K50

【Android 组件化】路由组件 ( 注解处理器中使用 JavaPoet 生成代码 )

( 注解处理器获取被注解节点 ) 博客 声明了 支持注解类型 , 并在 Activity 中使用了注解 , 在 注解处理器 检测出来使用注解 类节点 TypeElement ; 本篇博客中讲解...源代码 ; JavaPoet 项目 GitHub 地址 : https://github.com/square/javapoet 添加依赖库 : 在 Android Studio 项目中 Module...下 build.gradle 添加如下依赖库 , 即可使用 JavaPoet ; compile 'com.squareup:javapoet:1.13.0' 使用 JavaPoet 生成方法 :...方法 , 获取 Filer 对象 ; 在 AbstractProcessor 注解处理器 process 根据获取注解 , 生成相关代码 ; 注解处理器 使用 JavaPoet 示例 : package...; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec; import java.io.IOException

45020

拆 JakeWharton 系列之 ButterKnife

在该方案,通常有个必备三件套,分别是注解处理器 Processor,注册注解处理器 AutoService 和代码生成工具 JavaPoet。...简而言之,当我们写一个类时,其实是有固定结构JavaPoet 提供了生成这些结构 api,举例如下: 类:TypeSpec.classBuilder() 构造器:MethodSpec.constructorBuilder...() 方法:MethodSpec.methodBuilder() 参数:ParameterSpec.builder() 属性:FieldSpec.builder() 程序片段:CodeBlock.builder...: int id = R2.id.footer; 如果写代码是应付工作,如果工作是绩效驱动,这类问题完全不需要考虑。...但是,作为优秀、有态度、有情怀开源框架,JakeWharton 和 ButterKnife 给了我们榜样,为了解决这个问题,butterknife-lint 工程应运而生。

57330

butterknife 源码分析

因为在 Android 开发过程, 泛型,反射,注解这些知识进场会用到,几乎所有的框架至少都会用到上面的一两种知识, Gson 就用到泛型,反射,注解,Retrofit 也用到泛型,反射,注解 。...总的来说,大概可以分为以下几步: 在编译时候扫描注解,并做相应处理,生成 java 代码,生成 Java 代码是调用 javapoet 库生成。...,表示支持哪些类型注解,支持哪些版本, 重写 process 方法,处理相关注解,存进 Map 集合 根据扫描到注解信息(即 Map 集合),调用 javapoet 库生成 Java 代码。...javapoet 开生成代码。...形式,所以属性肯定是不能 private CodeBlock.Builder builder = CodeBlock.builder() .add(

93010

Android APT(编译时代码生成)最佳实践

作者:悦跑圈技术团队 https://joyrun.github.io/2016/07/19/AptHelloWorld/ 越来越多第三方库使用apt技术,DBflow、Dagger2、ButterKnife...Annotation处理器在处理Annotation时可以根据源文件Annotation生成额外源文件和其它文件(文件具体内容由Annotation处理器编写者决定),APT还会编译生成源文件和原来源文件...AutoService 主要作用是注解 processor 类,并对其生成 META-INF 配置信息。 JavaPoet 这个库主要作用就是帮助我们通过类调用形式来生成代码。...extends TypeElement> annotations, RoundEnvironment roundEnv) { MethodSpec main = MethodSpec.methodBuilder...compile project(':annotation') apt project(':compiler') } 编译使用 在随意一个类添加@Test注解 @Test public class

1.3K50

Android自定义processor实现bindView功能实例

一、简介 在现阶段Android开发,注解越来越流行起来,比如ButterKnife,Retrofit,Dragger,EventBus等等都选择使用注解来配置。...编译时注解核心依赖APT(Annotation Processing Tools)实现,原理是在某些代码元素上(类型、函数、字段等)添加注解,在编译时编译器会检查AbstractProcessor子类...,并且调用该类型process函数,然后将添加了注解所有元素都传递到process函数,使得开发人员可以在编译器进行相应处理,例如,根据注解生成新Java类,这也就是EventBus,Retrofit...下边我们将学习如何在Android Studio通过编译时注解生成java文件。 二、概念 注解处理器是一个在javac,用来编译时扫描和处理注解工具。...你可以为特定注解,注册你自己注解处理器。 注解处理器可以生成Java代码,这些生成Java代码会组成 .java 文件,但不能修改已经存在Java类(即不能向已有的类添加方法)。

62720

“终于懂了” 系列:组件化框架 ARouter 完全解析(二)APT技术

在编译流程进入Processor前,APT会对整个Java源文件进行扫描,这样就会获取到 所有添加注解和对应被注解类。...在process()获取了添加了@Route所有Element,然后调用parseRoutes()开始解析。...这里就要介绍 javepoet 这个库了: JavaPoet是一款可以自动生成Java文件第三方依赖 简洁易懂API,上手快 让繁杂、重复Java文件,自动化生成,提高工作效率,简化流程 JavaPoet...ClassName,通过包名和类名生成对象,在JavaPoet相当于为其指定Class ParameterizedTypeName,通过MainClass和IncludeClass生成包含泛型Class... loadInto 方法 MethodSpec.Builder loadIntoMethodOfGroupBuilder = MethodSpec.methodBuilder(

80430

【Android 组件化】路由组件 ( 生成 Root 类记录模块路由表 )

JavaPoet 生成代码 ) 【Android 组件化】路由组件 ( 注解处理器参数选项设置 ) 【Android 组件化】路由组件 ( 构造路由表路由信息 ) 【Android 组件化】路由组件...Router_Group_app.java ; 一个模块路由表可能有多个 , 需要为若干路由表再生成一个 Root 表, 用于作为路由表导航 ; 生成 Root 表样式 : 其中 “app”...; import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.ParameterSpec..., // 则截取第 0 和 第 1 个 "/" 之间字符串作为分组名称 if (routeGroup == null || "".equals(routeGroup)...Java 源码 Module 模块 , 使用注解生成源码 , 都在对应模块 " build\generated\ap_generated_sources\debug\out\ " 目录 ; app

2.5K10
领券