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

fel简单使用及介绍

编译执行就是将表达式编译成字节码(生成java代码编译模块都是可以扩展替换) Fel有多快? 通常情况下,Fel-0.7每秒可以执行千万次表达式(不包含编译时间)。...速度是Jexl-2.020倍以上。目前还没有发现开源表达式引擎比Fel快。 为何要使用Fel? Fel语法API非常简单,语法与Java基本相同,几乎没有学习成本。...Fel可以非常方便访问数组、集合、Map元素对象属性。 Fel可以非常方便调用对象方法类方法(如果这些还不够,可以添加自定义函数)。...Fel支持大数值高精度计算 Fel有良好安全管理功能 如果Fel不能满足你要求,扩展修改Fel很简单。 Fel不能做什么? Fel只支持表达式,不支持脚本。...fel.eval(“xxx”)获取对象内容 private static void array(){ FelEngine fel = new FelEngineImpl();

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

放弃 KotlinPoet 基于模版引擎生成 Dependency Gradle Plugin

在 groovy 里能 work 了,原因就是 mars-gradle-plugin 已经给 rootProject 创建了一个名为 veMarsExt extension kts 正确写法 import...这就很麻烦,大部分开发者得像我一样去反编译插件源码,才能确认 deps 生成规则,最后才能正确申明依赖,这也太离谱了吧! 所以有没有更友好一点方式呢?...有多个 enum class,这些 enum class 根据产物 groupId 生成(相同 groupId 枚举在同一个 enum class 内) Dependency 内代码缩进正常,well...fortmatted 避免生成 enum class 名 kotlin 保留关键字冲突 基于上述期望,Dependency.kt 可能长这样: object Dependency {...其实就是有一天,突然翻到森哥一篇是时候放弃 JavaPoet/KotlinPoet 了 ,内心 OS:你让我放弃就放弃啊,我不管,KotlinPoet 天下第一...

83640

Android--利用APT+kotlinpoet实现组件化开发Router机制

上一篇我们使用了一个全局Map缓存所有的Activity类,显然这是非常麻烦,一旦有所改动,就要手动修改该Map 为此,我们希望将keyActivity类映射关系,通过一定方式自动导入Map。...也可以用该方法归类 二、定义注解 要用到APT,那么肯定要自定义注解,指定APT解析注解 1.新建一个AnnotationModule 该module会被业务module插件moudle依赖 2....定义Router注解 在需要跳转Activity上使用该注解,使用grouppath区分需要跳转目标 /** * 表示一个跳转目标(Activity、fragment)需要加入路由表 *..., RouterMeta>) } 为了方便理解,写一个测试类实现该接口,我们最后通过kotlinpoet生成类也是参考该实现类: class RouterPathTest : IRouterPath...kotlinpoet代码生成时需要用到:类包名类名、方法名、生成文件名(也是类名)、生成包路径等 object Const { const val ACTIVITY = "android.app.Activity

90020

【Android】只给个泛型,如何自动初始化ViewModel与ViewBinding?这几种方案值得了解

本文我们也是从懒人角度看,除了这种方式之外我们还能用哪些更“懒”方式实现自动初始化。 这里就得提到反射作用了。...混淆,这才是大问题,反射代码在混淆过程中我们需要额外注意,因为类成员名称可能会被改变。如果不正确配置混淆规则,可能导致在运行时无法正确地通过名称找到相应类、方法或字段,引发异常。...二、使用APT代码生成 其实相比ASM字节码插桩,使用APT生成代码相对简单很多,我们可以生成对应 ViewBinding ViewModel 初始化对象。...我们添加 auto-service kotlinpoet 代码生成器依赖 implementation 'com.squareup:kotlinpoet:1.4.0' compileOnly...KotlinPoet 通过提供一个强大 DSL(领域特定语言)帮助开发者编程地构建 Kotlin 源文件。

9210

PHP 类型判断NULL,空检查

function test(array $names)//正确做法   function test(string $name)//错误做法   针对特定参数类型功能函数,在函数中对参入参数进行类型检查是很必须...在PHP中可以通过gettypeget_resource_type 两个函数得到变量类型,它们分别返回参数类型资源类型字符串,此时可以直接进行字符串比较确定类型是否正确。...对变量是否显式初始化可以使用”语法结构“-isset进行判断,它可以判断一个变量是否已经显式初始化。...但是isset是语法结构,is_null是函数。在性能上,语法结构相对要优秀一点。所以很多地方都推荐使用isset代替is_null使用。...但是从语义上来说,一个变量”是否已显示初始化”是否为NULL“是不同概念,在某些场景下使用isset是不合适,比如检查一个函数返回是否为NULL。

3.4K20

使用注解自动生成代码

(): String // 每辆车都有一个品牌 } 复制代码 各个牌子车 class BMW : Car { override fun brand(): String { return "BMW...true } } 复制代码 覆写 getSupportedAnnotationTypes() 方法,返回要处理哪些自定义注解,也可以使用 @SupportedAnnotationTypes() 它返回是...生成代码 JavaPoet KotlinPoet 是一个生成 Java/Kotlin 代码库 在上面的例子中,我们需要扫描出所有标注了 @CarAnnotation 注解类,然后自动生成一个...Processor 不会执行 踩坑记录 注解处理器不生效,所有 Processor 方法都没有执行 检查一下使用注解处理器工程是否使用了正确依赖方式,如果使用注解处理器工程 build.gradle...,反之不行,所以如果你是 Java kotlin 混用工程,使用 kapt 就可以了 2.注解处理器 init getSupportedAnnotationTypes 都执行了,但是 process

87300

20个 Javascript 技巧,提高我们摸鱼时间!

在我们日常任务中,我们需要编写函数,如排序、搜索、寻找惟一、传递参数、交换等,所以在这里分享一下我工作多年珍藏几个常用技巧方法,以让大家增加摸鱼时间。...这些方法肯定会帮助你: 减少代码行 Coding Competitions 增加摸鱼时间 1.声明初始化数组 我们可以使用特定大小初始化数组,也可以通过指定初始化数组内容,大家可能用是一组数组...求和,最小最大 我们应该利用 reduce方法快速找到基本数学运算。...a:b); // 输出: 2 3.排序字符串,数字或对象等数组 我们有内置方法sort()reverse()排序字符串,但是如果是数字或对象数组呢 字符串数组排序 const stringArr...42; // 输出: 0 剩余展开语法 function myFun(a, b, ...manyMoreArgs) { return arguments.length; } myFun("one

22920

还在用kapt吗? 试试ksp吧 | 项目复盘

,所以这部分注解解释器实现AbstractProcessor基本是一样。...init方法获取构造一些关键参数以及写入文件路径等等。process则是让我们可以获取到当前抽象语法树,之后获取到所有加了路由注解相应语法树,之后进行后续开发了。下面我们看下代码吧。...因为语法树变更 由于路由特性 所以这种多次都不需要进行处理 接下来我们只要遍历循环这个symbols列表,就可以继续路由表生成了。... = routerAnnotation.urls() } 然后我从KSAnnotated中先判断当前类型,判断当前语法树中是不是有java注解,如果有则抛出异常。...,插入不同注册代码,只是相对于以前来说,这次我选择了KotlinPoet

93850

20个 Javascript 技巧,提高我们摸鱼时间!

在我们日常任务中,我们需要编写函数,如排序、搜索、寻找惟一、传递参数、交换等,所以在这里分享一下我工作多年珍藏几个常用技巧方法,以让大家增加摸鱼时间。...这些方法肯定会帮助你: 减少代码行 Coding Competitions 增加摸鱼时间 1.声明初始化数组 我们可以使用特定大小初始化数组,也可以通过指定初始化数组内容,大家可能用是一组数组...求和,最小最大 我们应该利用 reduce 方法快速找到基本数学运算。...a:b); // 输出: 2 3.排序字符串,数字或对象等数组 我们有内置方法sort()reverse()排序字符串,但是如果是数字或对象数组呢 字符串数组排序 const stringArr...42; // 输出: 0 剩余展开语法 function myFun(a, b, ...manyMoreArgs) { return arguments.length; } myFun("one

19230

Android开发:使用Kotlin+协程+自定义注解+Retrofit网络框架

但是他是怎么HttpConfig联系起来呢?...分析 [1240] 1.首先流程图,我们会遍历出使用这个注解类,此时我们就已经拿到了ConfigService这个元素所有信息了。...但是具体内容还是交由子类去输出,因为每个注解对应输出方法体是不一样 suspend fun config2(page: String = "GS"): List {...比如在刚进入主页时,使用页面初始化CacheFirst 页面初始化后,再次下拉加载数据,使用NetCache 在当前主页上拉加载,使用NetOnly 此时一个接口会分别使用三个不同缓存策略 所以用isNeedAddParameter...,但是也没什么好解释,就是对kotlinpoet使用,比较繁琐且无聊。

1.3K50

Android:关于Kotlin入门语法指南(类、变量 & 函数)都总结在这里了!

基本观念 在Kotlin中,有一些观念是Java存在较大区别的,一些基本观念需要注意: 1.1 操作对象 在Kotlin中,所有变量成员方法属性都是对象 若无返回则返回Unit对象,大多数情况下...- 逻辑非 2.5 数组类型(Arrays) 实现方式:使用Array类 使用方法:size 属性、get方法set 方法。...(3, { i -> (i * 2) }) // 工厂函数源码分析 // 参数1 = 数组长度,花括号内是一个初始化代码块,给出数组下标 & 初始化 public inline constructor...括号里是传入函数参数值类型 // 示例:一个函数名为“abc”函数,传入参数类型是Int,返回类型是String fun abc(int: Int): String { return...hello") // 使用参数命名指定 // 结果: hello 1 foo("hello") // 出现编译错误 4.3 特别注意 一个函数,除了有传入参数 & 有返回情况,还会存在

1.3K30

Kotlin 1.2 有哪些新特性

开始,允许通过注解声明数组参数这种语法,从而取代了arrayOf函数数组声明方式。...通过访问属性isInitialized字段,开发者现在可以检查一个延迟初始化属性是否已经初始化了。...("customStrings = $customStrings") } 根据强制转换信息,能够推断出变量类型 Kotlin编译器现在支持通过强制转换信息,推断出变量类型。...如果你在调用一个返回“T”泛型方法时,试图将它返回“T”转换为特定类型如“Foo”,编译器现在知道这个方法调用中“T”其实是“Foo”类型。...这个对安卓开发者而言尤其重要,因为自从API26(Android7.0)开始,findViewById变成了泛型方法,然后编译器也会正确分析该方法调用返回

87820

【Java探索之旅】数组概念与初始化指南:动静结合

1.2 数组概念 二、数组创建及初始化 2.1 数组创建 2.2 数组初始化 2.3 注意要点 ️全篇总结 前言 数组是一种强大且常用数据结构,它为我们提供了一种有效方式存储管理大量相同类型数据...通过数组,我们可以避免重复定义大量变量,使代码更加简洁高效。本文将带您深入探索数组创建和初始化方法,帮助您更好地理解运用数组在编程中重要性灵活性。...类型元素数组 String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素数组 2.2 数组初始化 动态初始化: 在创建数组时,直接指定数组中元素个数...int[ ] array = new int[10]; 静态初始化: 在创建数组时不直接指定数据元素个数,而直接将具体数据内容进行指定 语法格式:T[] 数组名称 = {data1, data2,...通过动态初始化和静态初始化,我们可以灵活地创建和初始化数组,满足不同场景下需求。在使用数组时,我们需要注意数据类型一致性、初始化方式选择以及数组元素默认等细节,以确保代码正确可读性。

12010

Go字典(值得收藏)

声明初始化 声明一个字典语法: var 名字 map[key类型] value类型 看几个实际例子: package main import "fmt" func main() {...] int) // 声明并初始化一个空map m4 := make(map[string] string, 2) // 声明并初始化一个空map fmt.Printf...细心同学已经发现了,我们示例中「m4 := make(map[string] string, 2)」,除了声明key类型value类型外还定义了一个「2」长度。...因为在根据字典key寻找value时,需要判断传入key存储key是否相等,所以key类型必须支持判等操作。而函数、字典、切片三种类型是不能支持判等。...其原理就是通过不停探测,直至寻找到与当前hash表中不冲突key

24510

C# 数组基础

数组是一种数组结构,它可以包含同一个类型多个元素. 2、数组初始化方式 第一种:先声明后赋值 int[] array = new int[3]; array[0] = 0; array[1] = 1...,C#提供了两个方式"语法糖"; //语法糖一 int[] array = new int[] { 1, 2, 3 }; //语法糖二 int[] array={1,2,3}; 3、引用类型数组 C...主要通过Array.Sort()方法进行排序,Sort()方法需要数组中元素都实现IComparable接口,因为简单类型(如System.StringSystem.Int32)实现了IComparable...0,如果该实例应排在参数前面,该方法返回-1,如果该实例应排在参数后面,该方法返回1.CompareTo方法返回规则string.Compare()方法相同,如下图:  如上图示,当前实例应该排在参数前面...,所以result应为-1 ok,说明上面的结论正确(这里对象相等当前实例排在参数后面的情况自行证明).那么CompareTo()方法返回也应该这么写,代码如下: static void Main

1.2K70
领券