当前位置: 首页 > news >正文

5分钟轻松拿下Java枚举

文章目录

  • 一、枚举(Enum)
    • 1.1 枚举概述
    • 1.2 定义枚举类型
      • 1.2.1 静态常量案例
      • 1.2.2 枚举案例
      • 1.2.3 枚举与switch
    • 1.3 枚举的用法
      • 1.3.1 枚举类的成员
      • 1.3.2 枚举类的构造方法
        • 1)枚举的无参构造方法
        • 2)枚举的有参构造方法
      • 1.3.3 枚举中的抽象方法
    • 1.4 Enum 类
      • 1.4.1 Enum类中的方法
      • 1.4.2 测试方法功能
      • 1.4.3 枚举的两个抽象方法

一、枚举(Enum)

1.1 枚举概述

枚举(enum),全称enumeration是JDK 1.5 中引入的新特性。Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。

在JDK1.5 之前,我们定义常量都是: public static fianl。有了枚举之后,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

1.2 定义枚举类型

1.2.1 静态常量案例

我们使用静态常量来设置一个季节类:

package com.dfbz.demo01_静态成员变量;/*** @author lscl* @version 1.0* @intro:*/
public class Season {public static final Integer SPRING = 1;public static final Integer SUMMER = 2;public static final Integer AUTUMN = 3;public static final Integer WINTER = 4;
}

1/2/3/4分别代表不同的含义

测试类:

package com.dfbz.demo01_静态成员变量;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo01_静态成员变量 {@Testpublic void test1() {method(Season.SPRING);method(Season.WINTER);}public void method(Integer season) {switch (season) {case 1:System.out.println("Spring!");          // 具体的逻辑break;case 2:System.out.println("Summer!");           // 具体的逻辑break;case 3:System.out.println("Autumn!");          // 具体的逻辑break;case 4:System.out.println("Winter!");           // 具体的逻辑break;}}
}

1.2.2 枚举案例

Java 枚举类使用enum关键字来定义,各个常量使用逗号来分割。

package com.dfbz.demo02;/*** @author lscl* @version 1.0* @intro:*/
public enum Season {SPRING,SUMMER,AUTUMN,WINTER
}

Tips:定义枚举类的关键字是enum,而不是Enum,在Java中所有关键字都是小写的!

其中SPRINGSUMMERAUTUMNWINTER都是枚举项它们都是本类的实例,本类一共就只有四个实例对象。并且只能通过这四个关键字获取Season类的实例对象,不能使用new来创建枚举类的对象

package com.dfbz.demo02_枚举的使用;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo01_枚举的使用 {@Testpublic void test1() {// 通过枚举项来获取枚举实例Season spring = Season.SPRING;Season spring2 = Season.SPRING;// 通过相同的枚举项获取的枚举实例是一样的System.out.println(spring == spring2);          // true// 不同的枚举项获取的枚举实例是不一样的Season autumn = Season.AUTUMN;System.out.println(spring == autumn);           // false}
}

1.2.3 枚举与switch

使用枚举,能让我们的代码可读性更强。

package com.dfbz.demo02_枚举的使用;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo02_枚举与switch {@Testpublic void test1() {Season season = Season.AUTUMN;switch (season){case SPRING:System.out.println("春天~");break;case SUMMER:System.out.println("夏天!");break;case AUTUMN:System.out.println("秋天@");break;case WINTER:System.out.println("冬天&");break;default:System.out.println("错误的季节");}}
}

1.3 枚举的用法

1.3.1 枚举类的成员

枚举类和正常的类一样,可以有实例变量,实例方法,静态方法等等

  • 定义枚举类:
package com.dfbz.demo02_枚举的使用;/*** @author lscl* @version 1.0* @intro:*/
public enum Color {// 在枚举常量后面还有其他成员时,分号是必须的。枚举常量必须在枚举类中所有成员的上方声明RED, GREEN, BLUE;public String aaa = "AAA";              // 普通成员变量public static String bbb = "BBB";       // 静态成员变量private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public static void method() {System.out.println("enum hello~");}
}

Tips:当枚举项后面有其他成员(构造方法、成员变量、成员方法)时,最后一个枚举项必须加分号;

  • 测试类:
package com.dfbz.demo02_枚举的使用;/*** @author lscl* @version 1.0* @intro:*/
public class Demo03_枚举类的成员 {public static void main(String[] args) {// 访问静态成员变量System.out.println(Color.bbb);// 访问静态成员方法Color.method();// 通过枚举项获取实例Color red = Color.RED;// 通过枚举实例调用成员方法red.setName("红色");// 通过枚举实例调用成员方法System.out.println(red.getName());			// 红色}
}

1.3.2 枚举类的构造方法

1)枚举的无参构造方法

枚举类也可以有构造方法,构造方法默认都是private修饰,而且只能是private。因为枚举类的实例不能让外界来创建!

默认情况下,所有的枚举项的创建都是调用枚举类的无参构造方法,并且在获取任何一个枚举实例时,其他实例都将会被创建

package com.dfbz.demo03;/*** @author lscl* @version 1.0* @intro:*/
public enum Direction {// 在枚举常量后面还有其他成员时,分号是必须的。枚举常量必须在枚举类中所有成员的上方声明FRONT,BEHIND,LEFT,RIGHT;// 枚举类的构造方法都是private修饰的,可写可不写Direction(){System.out.println("Direction创建了...");}
}

Tips:

  • 1:当枚举项后面有其他成员(构造方法、成员变量、成员方法)时,最后一个枚举项必须加分号;
  • 2:所有的枚举类的构造方法都是私有的(private关键字可加可不加)

测试类:

package com.dfbz.demo02_枚举的使用;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo04_枚举类的构造方法 {/*** 枚举的无参构造方法*/@Testpublic void test1() {// 运行代码将会创建四个枚举实例Direction behind = Direction.BEHIND;}}

运行结果:

在这里插入图片描述

Tips:一旦创建了枚举实例,便会初始化里面的所有枚举项;创建枚举项就等同于调用本类的无参构造器,所以FRONT、BEHIND、LEFT、RIGHT四个枚举项等同于调用了四次无参构造器

2)枚举的有参构造方法

枚举项就是枚举类的实例,在创建定义枚举项时其实就是创建枚举类的实例,因此在定义枚举项就要传递实际的参数

  • 定义枚举项:
package com.dfbz.demo02_枚举的使用;/*** @author lscl* @version 1.0* @intro:*/
public enum  Week {// 枚举项就是枚举类的实例,在创建定义枚举项时其实就是创建枚举的实例,因此在定义枚举项就要传递实际的参数MONDAY("星期一",1),TUESDAY("星期二"),WEDNESDAY,THURSDAY("星期四",3),FRIDAY("星期五",4),SATURDAY("星期六",5),SUNDAY("星期六",4);private String name;private Integer loveLevel;// 注意: 枚举类的构造方法只能是私有(默认情况下也是私有)Week() {                                    // 空参构造}Week(String name) {                         // 有参构造this.name = name;}Week(String name, Integer loveLevel) {      // 有参构造this.name = name;this.loveLevel=loveLevel;}public void show() {System.out.println("我是【" + name + "】,我的喜好程度是【" + loveLevel + "】颗星");}@Overridepublic String toString() {return "Week{" +"name='" + name + '\'' +", loveLevel=" + loveLevel +'}';}
}
  • 测试类:
/*** 枚举的有参构造方法*/
@Test
public void test2() {// 获取第一个枚举实例时,将会创建所有的枚举实例Week friday = Week.FRIDAY;friday.show();System.out.println(friday);System.out.println("---------------");Week saturday = Week.SATURDAY;saturday.show();System.out.println(saturday);System.out.println("---------------");Week tuesday = Week.TUESDAY;tuesday.show();System.out.println(tuesday);System.out.println("---------------");Week wednesday = Week.WEDNESDAY;wednesday.show();System.out.println(wednesday);System.out.println("---------------");
}
  • 运行效果如下:

在这里插入图片描述

1.3.3 枚举中的抽象方法

枚举类中可以包含抽象方法,但是在定义枚举项时必须重写该枚举类中的所有抽象方法;

我们前面说过,每一个枚举项其实都是枚举类的实例对象,因此如果当前枚举类包含抽象方法时,在定义枚举项时就需要重写此枚举类的所有抽象方法,这跟我们以前使用的匿名内部类很相似;

  • 首先定义一个抽象类(包含了抽象方法):
package com.dfbz.demo03_枚举的抽象方法;/*** @author lscl* @version 1.0* @intro:*/
public abstract class AbstractSeason {public abstract void fun();
}
  • 实例化这个抽象类的时候,我们必须抽象其所有的抽象方法:
package com.dfbz.demo03_枚举的抽象方法;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo01_枚举的抽象方法 {@Testpublic void test1() {// 可以把abstractSeason看做是一个枚举项,在定义枚举项时必须重写枚举类的所有抽象方法AbstractSeason abstractSeason = new AbstractSeason() {@Overridepublic void fun() {System.out.println("重写了这个抽象类的所有抽象方法");}};}
}

当枚举类中含有抽象方法的时候,定义枚举项时,必须重写该枚举类中所有的抽象方法,像下面这种就是一种错误的定义:

package com.dfbz.demo03_枚举的抽象方法;/*** @author lscl* @version 1.0* @intro:*/
public enum Season {SPRING;         // 编译报错,定义枚举项时必须重写枚举类包含的所有抽象方法public abstract void fun();
}
  • 正确写法:
package com.dfbz.demo03_枚举的抽象方法;/*** @author lscl* @version 1.0* @intro:*/
public enum Season {SPRING(){@Overridepublic void fun() {System.out.println("我是春天~");}};        public abstract void fun();
}
  • 定义多几个枚举项:
package com.dfbz.demo03_枚举的抽象方法;/*** @author lscl* @version 1.0* @intro:*/
public enum Season {SPRING(){@Overridepublic void fun() {System.out.println("我是春天...");}},          SUMMER(){@Overridepublic void fun() {System.out.println("我是夏天~");}};          public abstract void fun();
}
  • 测试类:
@Test
public void test2() {Season spring = Season.SPRING;Season summer = Season.SUMMER;spring.fun();summer.fun();
}

在这里插入图片描述

1.4 Enum 类

1.4.1 Enum类中的方法

Java中,所有的枚举类都默认继承与java.lang.Enum类,这说明Enum中的方法所有枚举类都拥有。另外Enum也继承与Object,因此所有的枚举类都拥有与Object类一样的方法;


Enum类中的方法如下:

在这里插入图片描述

Tips:枚举类除了不能拥有Object中的clone、finalize方法外,其他方法都能拥有;

Enum类新增(或重写Object)的方法:

  • int compareTo(E e):比较两个枚举常量谁大谁小,其实比较的就是枚举常量在枚举类中声明的顺序(ordinal值)
  • boolean equals(Object o):比较两个枚举常量是否相等;
  • Class<E> getDeclaringClass():返回此枚举类的Class对象,这与Object中的getClass()类似;
  • int hashCode():返回枚举常量的hashCode
  • String name():返回枚举常量的名字;
  • int ordinal():返回枚举常量在枚举类中声明的序号,第一个枚举常量序号为0;
  • String toString():把枚举常量转换成字符串;
  • static T valueOf(Class enumType, String name):把字符串转换成枚举常量。

1.4.2 测试方法功能

  • 定义一个枚举类:
package com.dfbz.demo07;/*** @author lscl* @version 1.0* @intro:*/
public enum  Season {SPRING,SUMMER,AUTUMN,WINTER;
}
  • 测试类:
package com.dfbz.demo04_Enum;import org.junit.Test;/*** @author lscl* @version 1.0* @intro:*/
public class Demo01_Enum类的方法使用 {Season spring = Season.SPRING;              // ordinal:0Season summer = Season.SUMMER;              // ordinal:1Season autumn = Season.AUTUMN;              // ordinal:2Season winter = Season.WINTER;              // ordinal:3@Testpublic void test1() {System.out.println(spring.compareTo(spring));           // 0-0=0System.out.println(spring.compareTo(summer));           // 0-1=-1System.out.println(winter.compareTo(summer));           // 3-1=2System.out.println(winter.compareTo(spring));           // 3-0=3}@Testpublic void test2() {Season spring2 = Season.SPRING;System.out.println(spring == spring2);                  // trueSystem.out.println(spring.equals(spring2));             // 枚举对象的equals方法比较的是内存地址值(返回true)}@Testpublic void test3() {Class<Season> clazz = spring.getDeclaringClass();Class<? extends Season> clazz2 = spring.getClass();System.out.println(clazz == clazz2);            // true}@Testpublic void test4() {int hashCode = spring.hashCode();System.out.println(hashCode);           // 2027961269String name = spring.name();System.out.println(name);               // SPRINGint ordinal_spring = spring.ordinal();int ordinal_summer = summer.ordinal();int ordinal_autumn = autumn.ordinal();int ordinal_winter = winter.ordinal();System.out.println(ordinal_spring);         // 0System.out.println(ordinal_summer);         // 1System.out.println(ordinal_autumn);         // 2System.out.println(ordinal_winter);         // 3}@Testpublic void test5() {Season s = Season.valueOf("SPRING");        // 通过枚举项的名称获取枚举项System.out.println(s == spring);            // true(返回的还是同一个枚举项)}
}

1.4.3 枚举的两个抽象方法

每个枚举类都有两个静态方法,而且这两个方法不是父类中的方法。这又是枚举类特殊的地方;

  • static T[] values():返回本类所有枚举项;

  • static T valueOf(String name):通过枚举项的名字返回枚举项;


  • 测试类:
@Test
public void test6() {// 获取这个枚举类中所有的枚举项Season[] values = Season.values();for (Season value : values) {System.out.println(value);}// 通过枚举项的名称获取枚举项Season s = Season.valueOf("SPRING");System.out.println(s == spring);            // true
}

相关文章:

5分钟轻松拿下Java枚举

文章目录一、枚举(Enum)1.1 枚举概述1.2 定义枚举类型1.2.1 静态常量案例1.2.2 枚举案例1.2.3 枚举与switch1.3 枚举的用法1.3.1 枚举类的成员1.3.2 枚举类的构造方法1&#xff09;枚举的无参构造方法2&#xff09;枚举的有参构造方法1.3.3 枚举中的抽象方法1.4 Enum 类1.4.1 E…...

华为OD机试【独家】提供C语言题解 - 最小传递延迟

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明最小…...

【Web前端】关于JS数组方法的一些理解

一、具备栈特性的方法unshift(...items: T[]) : number将一个或多个元素添加到数组的开头&#xff0c;并返回该数组的新长度。shift(): T | undefined从数组中删除第一个元素&#xff0c;并返回该元素的值。此方法更改数组的长度。二、具备队列特性的方法push(...items: T[]): …...

多智能体集群协同控制笔记(1):线性无领航多智能体系统的一致性

对于连续时间高阶线性多智能体系统的状态方程为&#xff1a; x˙i(t)Axi(t)Bui(t),i1,2..N\dot {\mathbf{x}}_i(t)A\mathbf{x}_i(t)B\mathbf{u}_i(t),i1,2..N x˙i​(t)Axi​(t)Bui​(t),i1,2..N 下标iii代表第iii个智能体&#xff0c;ui(t)∈Rq1\mathbf{u}_i(t)\in R^{q \time…...

hadoop-Yarn资源调度器【尚硅谷】

大数据学习笔记 Yarn资源调度器 Yarn是一个资源调度平台&#xff0c;负责为运算程序提供服务器运算资源&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MapReduce等运算程序则相当于运行与操作系统之上的应用程序。 &#xff08;也就是负责MapTask、ReduceTask等任…...

聊聊如何避免多个jar通过maven打包成一个jar,多个同名配置文件发生覆盖问题

前言 不知道大家在开发的过程中&#xff0c;有没有遇到这种场景&#xff0c;外部的项目想访问内部nexus私仓的jar&#xff0c;因为私仓不对外开放&#xff0c;导致外部的项目没法下载到私仓的jar&#xff0c;导致项目因缺少jar而无法运行。 通常遇到这种场景&#xff0c;常用…...

Flume 使用小案例

案例一&#xff1a;采集文件内容上传到HDFS 1&#xff09;把Agent的配置保存到flume的conf目录下的 file-to-hdfs.conf 文件中 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.channels c1 # Describe/configure the source a1.sources.r1.type spoo…...

DLO-SLAM代码阅读

文章目录DLO-SLAM点评代码解析OdomNode代码结构主函数 main激光回调函数 icpCB初始化 initializeDLO重力对齐 gravityAlign点云预处理 preprocessPoints关键帧指标 computeMetrics设定关键帧阈值setAdaptiveParams初始化目标数据 initializeInputTarget设置源数据 setInputSour…...

X和Ku波段小尺寸无线电设计

卫星通信、雷达和信号情报(SIGINT)领域的许多航空航天和防务电子系统早就要求使用一部分或全部X和Ku频段。随着这些应用转向更加便携的平台&#xff0c;如无人机(UAV)和手持式无线电等&#xff0c;开发在X和Ku波段工作&#xff0c;同时仍然保持极高性能水平的新型小尺寸、低功耗…...

推荐算法 - 汇总

本文主要对推荐算法整体知识点做汇总&#xff0c;做到总体的理解&#xff1b;深入理解需要再看专业的材料。推荐算法的意义推荐根据用户兴趣和行为特点&#xff0c;向用户推荐所需的信息或商品&#xff0c;帮助用户在海量信息中快速发现真正所需的商品&#xff0c;提高用户黏性…...

Android 系统的启动流程

前言&#xff1a;从开机的那一刻&#xff0c;到开机完成后launcher将所有应用进行图标展示的这个过程&#xff0c;大概会有哪一些操作&#xff1f;执行了哪些代码&#xff1f;作为Android开发工程师的我们&#xff0c;有必要好好的梳理一遍。既然要梳理Android系统的启动流程&a…...

自学5个月Java找到了9K的工作,我的方式值得大家借鉴 第二部分

我的学习心得&#xff0c;我认为能不能自学成功的要素有两点。 第一点就是自身的问题&#xff0c;虽然想要转行学习Java的人很多&#xff0c;但是非常强烈的想要转行学好的人是小部分。而大部分人只是抱着试试的心态来学习Java&#xff0c;这是完全不可能的。所以能不能学成Jav…...

Vue 3 第五章:reactive全家桶

文章目录1. reactive1.1. reactive函数创建一个响应式对象1.2. 修改reactive创建的响应式对象的属性2. readOnly2.1. 使用 readonly 函数创建一个只读的响应式对象2.2. 如何修改嵌套在只读响应式对象中的对象?3. shallowReactive3.1. 使用 shallowReactive 函数创建一个浅层响…...

【联机对战】微信小程序联机游戏开发流程详解

现有一个微信小程序叫中国象棋项目&#xff0c;棋盘类的单机游戏看着有缺少了什么&#xff0c;现在给补上了&#xff0c;加个联机对战的功能&#xff0c;增加了可玩性&#xff0c;对新手来说&#xff0c;实现联机游戏还是有难度的&#xff0c;那要怎么实现的呢&#xff0c;接下…...

优化基于axios接口管理的骚操作

优化基于axios接口管理的骚操作&#xff01; 本文针对中大型的后台项目的接口模块优化&#xff0c;在不影响项目正常运行的前提下&#xff0c;增量更新。 强化功能 1.接口文件写法简化&#xff08;接口模块半自动化生成&#xff09; 2.任务调度、Loading调度&#xff08;接口层…...

【Django功能开发】如何正确使用定时任务(启动、停止)

系列文章目录 【Django开发入门】ORM的增删改查和批量操作 【Django功能开发】编写自定义manage命令 文章目录系列文章目录前言一、django定时任务二、django-apscheduler基本使用1.安装django-apscheduler2.配置settings.py的INSTALLED_APPS3.通过命令生成定时记录表3.如何创…...

7个好用到爆的音频、配乐素材网站,BGM都在这里了

现在只要有一部手机&#xff0c;人人都能成为视频创作者。一个好的视频不能缺少的就是内容、配乐&#xff0c;越来越注重版权的当下&#xff0c;音效素材使用不当造成侵权的案例层出不穷。为了避免侵权&#xff0c;找素材让很多创作者很头疼。 今天我就整理了7个可以免费下载&…...

JUC(二)

1.可重入锁–ReentrantLock原理 1.1.非公平锁的实现原理 1.1.1.加锁解锁流程 1>.先从构造器开始看,默认为非公平锁,可以在构造函数中设置参数指定公平锁 public ReentrantLock() {sync = new NonfairSync(); }public ReentrantLock...

ATS认证教学

我用的版本是ATS7.11、系统版本是用最新的ios13.2.1 定义 ATS旨在分析通过UART、USB和蓝牙传输传输的iAP流量、通过USB和无线&#xff08;蓝牙和Wi-Fi&#xff09;传输的CarPlay流量、通过Wi-Fi传输的AirPlay 2流量以及闪电音频流量。 ATS是Apple’s Accessory Test System的…...

【操作系统】进程管理

进程与线程 1. 进程 进程是资源分配的基本单位 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态&#xff0c;所谓的创建进程和撤销进程&#xff0c;都是指对 PCB 的操作。 下图显示了 4 个程序创建了 4 个进程&#xff0c;这 4 个进程可以并发地执行…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...