首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏深度学习与python

    TypeSpec:一种受TypeScript启发的实用的API定义语言

    通过在开发过程中使用 TypeSpec,微软工程师提高了在其他实际场景中使用 TypeSpec 进行 API 开发的可靠性和效率。 TypeSpec 的主要创新点是什么? Brian Terlson:TypeSpec 源于我们在 Azure 中大规模交付服务的经验。 其次,TypeSpec 是协议无关的。它支持随库添加的特定协议或序列化格式。这使得 TypeSpec 可以作为不止一个协议的单一事实来源。 InfoQ:TypeSpec 为软件架构师提供的基本价值主张是什么? Terlson:TypeSpec 的目标是降低构建和使用 API 的成本,使它们更实用。 TypeSpec 还致力于实现与 OpenAPI 等 API 描述格式的互操作。因此,在现有的工具链上就可以获得这些好处。 InfoQ:TypeSpec 未来几年的愿景是什么?

    47910编辑于 2024-05-22
  • 来自专栏前端Q

    受 TypeScript 启发,微软又搞了一个神器!

    TypeSpec 使用示例 生成 OpenAPI 描述文件 生成 JSON Schema 生成 Protobuf TypeSpec Playground 要快速体验 TypeSpec 的功能,推荐你使用 File 视图 Swagger UI 视图 TypeSpec 快速上手 1.安装 @typespec/compiler 编译器 npm install -g @typespec/compiler 2. 安装 VSCode 扩展 在 VSCode 中搜索 TypeSpec 安装 TypeSpec for VS Code 扩展,或在浏览器中打开 TypeSpec for VS Code[3] 网址后点击 参考资料 [1] TypeSpec: https://typespec.io/ [2] playground: https://typespec.io/playground [3] TypeSpec for itemName=typespec.typespec-vscode [4] 使用文档: https://typespec.io/docs

    63720编辑于 2024-04-15
  • 来自专栏微信公号【Java技术江湖】

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

    helloWorld = TypeSpec.classBuilder("HelloWorld") .addModifiers(Modifier.PUBLIC, Modifier.FINAL) $N = $N", "greeting", "greeting") .build(); TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld 如下 TypeSpec helloWorld = TypeSpec.interfaceBuilder("HelloWorld") .addModifiers(Modifier.PUBLIC) 来创建,使用addEnumConstant来添加 TypeSpec helloWorld = TypeSpec.enumBuilder("Roshambo") .addModifiers(Modifier.PUBLIC TypeSpec.anonymousClassBuilder("")。

    99150编辑于 2021-12-14
  • 来自专栏小满

    Javapoet源码解析

    6 .build(); 7 8 TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld") 9 .addModifiers ,首先来看第一个JavaFile 1 public static Builder builder(String packageName, TypeSpec typeSpec) { 2 checkNotNull (packageName, "packageName == null"); 3 checkNotNull(typeSpec, "typeSpec == null"); 4 return 接下来看看构造Builder方法时使用的TypeSpec是什么。 中的静态内部类,用于构建当前的TypeSpec对象。

    1.1K20发布于 2019-09-02
  • 来自专栏刘望舒

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

    .build(); TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld") .addModifiers(Modifier.PUBLIC item.getSimpleName(),ClassName.get(item.asType()).toString(),diView.value())); } TypeSpec typeSpec = TypeSpec.classBuilder("DI" + element.getSimpleName()) .superclass(TypeName.get .build(); JavaFile javaFile = JavaFile.builder(getPackageName(typeElement), typeSpec

    1.6K50发布于 2018-07-30
  • 来自专栏韩曙亮的移动开发专栏

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

    typeSpec = TypeSpec.classBuilder(rootClassName) .addSuperinterface(ClassName.get(iRouteRoot) )) .build(); // 生成 Java 源文件 JavaFile javaFile = JavaFile.builder("kim.hsl.router", typeSpec typeSpec = TypeSpec.classBuilder(rootClassName) .addSuperinterface(ClassName.get(iRouteRoot typeSpec = TypeSpec.classBuilder(groupClassName) .addSuperinterface(ClassName.get (); // 生成 Java 源码文件 JavaFile javaFile = JavaFile.builder("kim.hsl.router", typeSpec

    3.3K10编辑于 2023-03-29
  • 来自专栏刘晓杰

    AnnotationProcessor实战:实现ButterKnife的setOnClickListener方法

    java库找不到Android类,会报错 // TypeSpec onCLick = TypeSpec.anonymousClassBuilder("") // field.getResId(), listenerClass.setter(), listenerClass.type(), method.name(), VIEW, name); TypeSpec onCLick = TypeSpec.anonymousClassBuilder("") .superclass(ClassName.bestGuess(listenerClass.type host.findViewById($L).setOnClickListener(null)", field.getResId()); } //generaClass TypeSpec injectClass = TypeSpec.classBuilder(mTypeElement.getSimpleName() + "$$ClickBinder")

    78310发布于 2020-06-02
  • 来自专栏木子杂志

    android JavaPoet记录

                  .addStatement("setContentView(R.layout.activity_main)")               .build();        //TypeSpec 创建 class 或者 interface        TypeSpec mainActivity = TypeSpec.classBuilder("MainActivity")                

    93810发布于 2020-08-09
  • 来自专栏Android研究院

    组件化专题-APT实战

    T.out.println($S)",System.class,"Hello JavaPoet") 14 .build(); 15 //创建类 16 TypeSpec typeSpec = TypeSpec.classBuilder("HelloWord") 17 .addModifiers(Modifier.PUBLIC,Modifier.FINAL )));//注解的值 62 } 63 64 //创建类 65 TypeSpec typeSpec = TypeSpec.classBuilder("ManagerFindBy" + element.getSimpleName()) 66 创建Javaclass 文件 71 72 JavaFile javaFile = JavaFile.builder("com.prim.find.by", typeSpec

    1.1K10发布于 2018-09-11
  • 来自专栏移动开发面面观

    annotationProcessor 自动生成代码(下)

    下面是一段示例,其中MethodSpec是方法块,TypeSpec是类型块,JavaFile是Java文件。 create interface type ClassName interfaceName = ClassName.get(packageName, "IPlugin"); TypeSpec cls = TypeSpec.classBuilder(clazz.getSimpleName().toString() + "Impl") .addModifiers

    1.7K30发布于 2018-12-19
  • 来自专栏Android补给站

    自定义Android注解Part2:代码自动生成

     typeBuilder = TypeSpec.classBuilder(autoGenerationClassName) 13        .addModifiers(Modifier.PUBLIC 这里通过使用TypeSpec.Builder来构建。它是JavaPoet中的类。 TypeSpec.Builder: 定义一个类 addModifiers: 定义private、public与protected类型 addAnnotation: 对Element元素添加注解。 例如:@Keep TypeSpec.Builder -> addMethod: 添加方法 MethodSpec -> addParameter: 为方法添加参数类型与参数名 MethodSpec -> = null) { 14        //构建匿名class 15        TypeSpec typeSpec = TypeSpec.anonymousClassBuilder("") 16                

    79330发布于 2019-07-16
  • 来自专栏韩曙亮的移动开发专栏

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

    ; } 使用 JavaPoet 生成方法 : 调用 TypeSpec 的如下方法可以完成 Java 类创建 ; classBuilder 静态方法 , 创建类 , 参数是类名 , addModifiers 方法可以设置类的可见性 , 是否是 final 方法 , addMethod 方法设置类中的函数 ; // 指定 public final class HelloWorld 类 TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld") .addModifiers(Modifier.PUBLIC, Modifier.FINAL) .addMethod com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec .build(); // 指定 public final class HelloWorld 类 TypeSpec helloWorld = TypeSpec.classBuilder

    80920编辑于 2023-03-29
  • 来自专栏韩曙亮的移动开发专栏

    【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )

    routeBean.getRouteAddress(), // $S 字符串 : "app" routeBean.getRouteGroup()); } 5、Java 类创建 调用 TypeSpec.classBuilder 方法生成类 ; // 创建类 // 构造类名 Router_Group_main String groupClassName = "Router_Group_" + groupName; // 创建类 TypeSpec typeSpec = TypeSpec.classBuilder(groupClassName) .addSuperinterface(ClassName.get(iRouteGroup methodBuilder.build()) .build(); // 生成 Java 源码文件 JavaFile javaFile = JavaFile.builder("kim.hsl.router", typeSpec

    1K20编辑于 2023-03-29
  • 来自专栏移动开发面面观

    annotationProcessor 自动生成代码(上)

    .build(); // HelloWorld class TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld .build(); // HelloWorld class TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld

    4.5K40发布于 2018-11-19
  • 来自专栏韩曙亮的移动开发专栏

    【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )

    com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec .build(); // 指定 public final class HelloWorld 类 TypeSpec helloWorld = TypeSpec.classBuilder com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec .build(); // 指定 public final class HelloWorld 类 TypeSpec helloWorld = TypeSpec.classBuilder

    1.4K20编辑于 2023-03-29
  • 来自专栏每天学点Android知识

    从0到1实现一个Android路由(3)——APT收集路由

    T.class)", url, typeElement.asType()); } builder.addStatement("return urlMaps"); TypeSpec typeSpec = TypeSpec.classBuilder("UrlCollectorImpl") .addModifiers(Modifier.PUBLIC, Modifier.FINAL )) .build(); JavaFile javaFile = JavaFile.builder("com.xingfeng.android.api", typeSpec

    80520发布于 2019-08-17
  • 来自专栏Java与Android技术栈

    用kotlin实现activity路由框架的ProcessorProcessor的原理下载安装特性使用方法总结

    com.squareup.javapoet.JavaFile import com.squareup.javapoet.MethodSpec import com.squareup.javapoet.TypeSpec : TypeSpec? } } } val routerInitMethod = routerInitBuilder.build() return TypeSpec.classBuilder 坑2: 原先getRouterTableInitializer()是长这样的: private TypeSpec getRouterTableInitializer(Set<? } } MethodSpec routerInitMethod = routerInitBuilder.build(); return TypeSpec.classBuilder

    88920发布于 2018-08-24
  • 来自专栏陶士涵的菜地

    [PHP] 商品类型规格属性后台管理(代码流程备忘)

    $typeSpecs=$data['spec_id']; $typeSpecArray=array(); foreach ($typeSpecs as $typeSpec { $temp=array(); $temp['type_id']=$res['id']; $temp['spec_id']=$typeSpec $typeSpecs=$data['spec_id']; $typeSpecArray=array(); foreach ($typeSpecs as $typeSpec $temp=array(); $temp['type_id']=$data['type_id']; $temp['spec_id']=$typeSpec

    1K10发布于 2019-09-10
  • 来自专栏lib库

    组件通信注解框架实践

    apiNameContract---"+apiNameContract); } } } return true; } 然后生成代码,主要是指定生成代码路径,然后创建typeSpec 最后去write写入代码……//生成注解类相关代码 TypeSpec typeSpec = buildClass(apiNameContract); String s = typeSpec.toString (); if (RouteConstants.LOG){ System.out.println("RouteImplProcessor--------process-------typeSpec ; } try { //指定路径:com.yc.api.contract JavaFile.builder(RouteConstants.PACKAGE_NAME_CONTRACT, typeSpec ParameterSpec是创建参数的实现,MethodSpec是函数的生成实现等等……private TypeSpec buildClass(ApiContract<ClassName> apiNameContract

    82700发布于 2021-03-10
  • 来自专栏程序员开发工具

    面试官,怎样实现 Router 框架?

    module : moduleNames) { initMethod.addStatement("RouterMapping_" + module + ".map()"); } TypeSpec routerInit = TypeSpec.classBuilder("RouterInit") .addModifiers(Modifier.PUBLIC, Modifier.FINAL com.xj.router.api.Router.getInstance().add($S, $T.class)", info.getRoute(), info.getTypeElement()); } TypeSpec typeSpec = TypeSpec.classBuilder(moduleName) // .addSuperinterface(ClassName.get(interfaceType .build(); try { JavaFile.builder(Constants.ROUTE_CLASS_PACKAGE, typeSpec

    97720发布于 2019-12-03
领券