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

Java 高级特性” 体系(反射 + 枚举 + Lambda)

1.反射1.1 定义Java的反射reflection机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法不用new不用知道类名也能操作类。1.2 用途框架底层核心Spring、MyBatis 全靠反射动态加载类、动态调用方法突破私有访问限制1.3 反射基本信息Java程序中许多对象在运行时会出现两种类型运行时类型 和 编译时类型例如Person p new Student()这句代码中p在编译时类型为Person运行时类型为Student。程序需要在运行时发现对象和类的真实信息。而通过使用反射程序就能判断出该对象和类属于哪些类。1.4 反射相关的类类名用途链接文档Class类类的实体在运行的Java应用程序中表示类和接口Class | API reference | Android DevelopersField类类的成员变量/类的属性Field | API reference | Android DevelopersMethod类类的方法Method | API reference | Android DevelopersConstructor类类的构造方法Constructor | API reference | Android Developers1.5 反射示例1.51获得Class对象的三种方式第一种使用 Class.forName(“类的全路径名”); 静态方法。前提已明确类的全路径名。第二种使用 .class 方法。说明仅适合在编译前就已经明确要操作的 Class第三种使用类对象的 getClass() 方法package test; public class demo5 { static class Student{ } public static void main(String[] args) { //1.通过getClass获取Class对象 Student s1 new Student(); Class c1 s1.getClass(); //2.直接通过 类名.class 的方式得到,该方法最为安全可靠程序性能更高 //这说明任何一个类都有一个隐含的静态成员变量 class Class c2 Student.class; //3、通过 Class 对象的 forName() 静态方法来获取用的最多 //但可能抛出 ClassNotFoundException 异常 Class c3 null; try { //注意这里是类的全路径如果有包需要加包的路径 //c3 Class.forName(test.demo5.Student); ❌ c3 Class.forName(test.demo5$Student);✅ } catch (ClassNotFoundException e) { e.printStackTrace(); } //一个类在 JVM 中只会有一个 Class 实例,即我们对上面获取的 //c1,c2,c3进行 equals 比较发现都是true System.out.println(c1.equals(c2)); System.out.println(c1.equals(c3)); System.out.println(c2.equals(c3)); } }获取方式语法特点适用场景对象.getClass()s1.getClass()必须先创建对象运行时获取已经有对象需要获取类信息类名.classStudent.class不需要创建对象编译期获取性能最高、最安全编译期就知道类名静态获取Class.forName()Class.forName(全类名)动态加载只需要类名字符串可配置框架动态加载类、配置文件指定类名 为什么test.demo5.Student是错的test.demo5$Student是对的这是静态内部类的全限定名规则.符号只代表「包层级」test.demo5.Student会被 JVM 理解为test包 →demo5包 →Student类但你的demo5不是包是外部类Student是demo5里的静态内部类所以 JVM 根本找不到这个类直接抛异常ClassNotFoundException。$符号代表「内部类」Java 规定内部类包括静态内部类的全限定名必须用$分隔外部类和内部类编译后静态内部类会生成独立的字节码文件demo5$Student.classforName就是根据这个文件名加载类的所以正确写法是test.demo5$Student表示test包下demo5类的内部类Student.1.6反射优点和缺点优点对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意一个方法增加程序的灵活性和扩展性降低耦合性提高自适应能力反射已经运用在了很多流行框架如Struts、Hibernate、Spring 等等。缺点1.使用反射会有效率问题。会导致程序效率降低.2.反射技术绕过了源代码的技术因而会带来维护问题。反射代码比相应的直接代码更复杂。2 枚举2.1 定义枚举是一组固定不变的常量用来代替大量public static final常量代码更简洁、更安全。本质是 java.lang.Enum 的子类也就是说自己写的枚举类就算没有显示的继承 Enum 但是其默认继承了这个类。2.2 使用2.2.1.sitch语句package test; public class demo6 { public enum TestEnum { RED,BLACK,GREEN,WHITE,hhh; public static void main(String[] args) { TestEnum testEnum2 TestEnum.hhh; switch (testEnum2) { case RED: System.out.println(red); break; case BLACK: System.out.println(black); break; case WHITE: System.out.println(WHITE); break; case GREEN: System.out.println(black); break; default: System.out.println(不是颜色); } } } }2.2.2、常用方法Enum 类的常用方法方法名称描述遍历方法values()以数组形式返回枚举类型的所有成员遍历所有枚举ordinal()获取枚举成员的索引位置获取枚举序号valueOf()将普通字符串转换为枚举实例字符串转枚举compareTo()比较两个枚举成员在定义时的顺序枚举比较package test; public class demo7{ public enum TestEnum { RED, BLACK, GREEN, WHITE; public static void main(String[] args) { TestEnum[] testEnum2 TestEnum.values(); for (int i 0; i testEnum2.length; i) { System.out.println(testEnum2[i] testEnum2[i].ordinal()); } System.out.println(); System.out.println(TestEnum.valueOf(GREEN)); System.out.println(); TestEnum testEnum TestEnum.BLACK; TestEnum testEnum21 TestEnum.RED; System.out.println(testEnum.compareTo(testEnum21)); System.out.println(BLACK.compareTo(RED)); System.out.println(RED.compareTo(BLACK)); } } }2.3 枚举优点缺点优点枚举常量更简单安全 。枚举具有内置方法 代码更优雅缺点1.不可继承无法扩展为什么枚举实现单例模式是安全的与他们三个有关系吗枚举天生就是单例而且是 Java 中最安全、最优雅的单例实现没有之一。枚举实例在 JVM 中天然是单例且全局唯一枚举里的每个常量本质都是public static final的在类加载阶段就初始化由 JVM 保证只会存在一个实例。构造方法天然私有外部无法通过 new 创建对象枚举的构造器默认就是 private而且编译器不允许我们把它改成 public从根源上杜绝了手动实例化。可以防止反射攻击普通单例可以通过反射暴力调用私有构造方法从而破坏单例但 JVM 对枚举做了特殊处理反射无法通过 new Instance 创建枚举对象会直接抛出异常因此单例不会被破坏。可以防止序列化破坏单例普通 Java 对象序列化再反序列化时会创建一个新对象而枚举序列化时只传输名字反序列化时通过valueOf()找原有常量不会产生新实例依然保持单例。天然线程安全因为是在类加载阶段初始化不存在多线程并发问题不需要加锁也不需要做双重校验。和枚举直接相关它本身就是用枚举特性实现的。和反射强相关普通单例会被反射破坏枚举不会。和Lambda 基本无关Lambda 只是函数式写法不影响单例安全。3.Lambda表达式3.1 是什么简化的匿名内部类写法专门用于函数式接口只有一个抽象方法的接口。(参数) - { 代码体 }//无返回值无参数 FunctionalInterface interface NoParameterNoReturn { void test(); } //无返回值一个参数 FunctionalInterface interface OneParameterNoReturn { void test(int a); } //无返回值多个参数 FunctionalInterface interface MoreParameterNoReturn { void test(int a,int b); } //有返回值无参数 FunctionalInterface interface NoParameterReturn { int test(); } //有返回值一个参数 FunctionalInterface interface OneParameterReturn { int test(int a); } //有返回值多参数 FunctionalInterface interface MoreParameterReturn { int test(int a,int b); }3.2 Lambda表达式的基本使用package test; // 1. 无参数无返回值 函数式接口 FunctionalInterface interface NoParameterNoReturn { void test(); } // 2. 一个参数无返回值 函数式接口 FunctionalInterface interface OneParameterNoReturn { void test(int a); } // 3. 多个参数无返回值 函数式接口 FunctionalInterface interface MoreParameterNoReturn { void test(int a, int b); } // 4. 无参数有返回值 函数式接口 FunctionalInterface interface NoParameterReturn { int test(); } // 5. 一个参数有返回值 函数式接口 FunctionalInterface interface OneParameterReturn { int test(int a); } // 6. 多个参数有返回值 函数式接口 FunctionalInterface interface MoreParameterReturn { int test(int a, int b); } public class demo8 { public static void main(String[] args) { // 1. 无参无返回 NoParameterNoReturn noParameterNoReturn () - { System.out.println(无参数无返回值); }; noParameterNoReturn.test(); // 2. 单参无返回 OneParameterNoReturn oneParameterNoReturn (int a) - { System.out.println(一个参数无返回值 a); }; oneParameterNoReturn.test(10); // 3. 多参无返回 MoreParameterNoReturn moreParameterNoReturn (int a, int b) - { System.out.println(多个参数无返回值 a b); }; moreParameterNoReturn.test(20, 30); // 4. 无参有返回 NoParameterReturn noParameterReturn () - { System.out.println(有返回值无参数); return 40; }; int ret noParameterReturn.test(); System.out.println(ret); // 5. 单参有返回 OneParameterReturn oneParameterReturn (int a) - { System.out.println(有返回值有一个参数); return a; }; ret oneParameterReturn.test(50); System.out.println(ret); // 6. 多参有返回 MoreParameterReturn moreParameterReturn (int a, int b) - { System.out.println(有返回值多个参数); return a b; }; ret moreParameterReturn.test(60, 70); System.out.println(ret); } }3.3. 语法精简public static void main(String[] args) { MoreParameterNoReturn moreParameterNoReturn ( a, b)-{ System.out.println(无返回值多个参数省略参数类型a b); }; moreParameterNoReturn.test(20,30); OneParameterNoReturn oneParameterNoReturn a -{ System.out.println(无参数一个返回值,小括号可以胜率 a); }; oneParameterNoReturn.test(10); NoParameterNoReturn noParameterNoReturn ()-System.out.println(无参数无返回值方法体中只有一行代码); noParameterNoReturn.test(); //方法体中只有一条语句且是return语句 NoParameterReturn noParameterReturn ()- 40; int ret noParameterReturn.test(); System.out.println(ret); }3.4 Lambda在集合当中的使用接口名称新增方法核心作用CollectionforEach()遍历集合支持 Lambda 表达式removeIf(Predicate? super E filter)根据条件批量删除元素stream()获取集合的顺序流Stream用于流式操作parallelStream()获取集合的并行流提升大数据量处理效率spliterator()获取可分割迭代器用于并行遍历ListreplaceAll(UnaryOperatorE operator)对集合中所有元素执行统一操作批量替换sort(Comparator? super E c)直接在 List 上排序无需额外创建数组MapK,VgetOrDefault(Object key, V defaultValue)键不存在时返回默认值避免空指针forEach(BiConsumer? super K,? super V action)遍历 Map支持 Lambda 处理键值对replaceAll(BiFunction? super K,? super V,? extends V function)批量更新 Map 中所有值putIfAbsent(K key, V value)键不存在时才插入存在则不覆盖remove(Object key, Object value)仅当键值对完全匹配时才删除replace(K key, V value)/replace(K key, V oldValue, V newValue)替换指定键的值支持新旧值校验computeIfAbsent(K key, Function? super K,? extends V mappingFunction)键不存在时计算并插入新值computeIfPresent(K key, BiFunction? super K,? super V,? extends V remappingFunction)键存在时计算并更新值compute(K key, BiFunction? super K,? super V,? extends V remappingFunction)无论键是否存在直接计算并更新值merge(K key, V value, BiFunction? super V,? super V,? extends V remappingFunction)合并新旧值灵活处理键值对3.5 代码展示Collection中的 forEach() 方法演示package test; import java.util.ArrayList; import java.util.function.Consumer; public class demo10 { public static void main(String[] args) { ArrayListString list new ArrayList(); list.add(Hello); list.add(西安); list.add(hello); list.add(中国); list.forEach(new ConsumerString(){ Override public void accept(String str){ //简单遍历集合中的元素。 System.out.print(str ); } }); } }修改为lambda表达式package test; import java.util.ArrayList; import java.util.function.Consumer; public class demo10 { public static void main(String[] args) { ArrayListString list new ArrayList(); list.add(Hello); list.add(西安); list.add(hello); list.add(中国); //表示调用一个不带有参数的方法其执行花括号内的语句为原来的函数体内容。 list.forEach(s - { System.out.print(s); }); } }List中的 sort()方法的演示package test; import java.util.ArrayList; import java.util.Comparator; public class demo12 { public static void main(String[] args) { ArrayListString list new ArrayList(); list.add(Hello); list.add(西安); list.add(hello); list.add(中国); list.sort(new ComparatorString() { Override public int compare(String str1, String str2){ //注意这里比较长度 return str1.length()-str2.length(); } }); System.out.println(list); } }修改为lambda表达式package test; import java.util.ArrayList; import java.util.Comparator; public class demo12 { public static void main(String[] args) { ArrayListString list new ArrayList(); list.add(Hello); list.add(西安); list.add(hello); list.add(中国); //调用带有2个参数的方法且返回长度的差值 list.sort((str1,str2)- str1.length()-str2.length()); System.out.println(list); } }Map 中的 forEach() 方法演示package test; import java.util.HashMap; import java.util.function.BiConsumer; public class demo13 { public static void main(String[] args) { HashMapInteger, String map new HashMap(); map.put(1, hello); map.put(2, 西安); map.put(3, hello); map.put(4, 中国); map.forEach(new BiConsumerInteger, String(){ Override public void accept(Integer k, String v){ System.out.println(k v); } }); } }修改为lambda表达式package test; import java.util.HashMap; import java.util.function.BiConsumer; public class demo13 { public static void main(String[] args) { HashMapInteger, String map new HashMap(); map.put(1, hello); map.put(2, 西安); map.put(3, hello); map.put(4, 中国); map.forEach((k,v)- System.out.println(k v)); } }3.6Lambda 优缺点Lambda表达式的优点很明显在代码层次上来说使代码变得非常的简洁。缺点也很明显代码不易读。优点代码简洁开发迅速方便函数式编程非常容易进行并行计算Java 引入 Lambda改善了集合操作缺点1.代码可读性变差2.在非并行计算中很多计算未必有传统的 for 性能要高3.不容易进行调试

相关文章:

Java 高级特性” 体系(反射 + 枚举 + Lambda)

1.反射 1.1 定义 Java的反射(reflection)机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 不用 new,不用知道类名,也能操作类。 1.2 用途 框架底层核心(S…...

手把手教你用F1C200s驱动正点原子7寸LCD屏:完整配置流程与LVGL测试

从零构建F1C200s嵌入式GUI系统:正点原子7寸屏驱动与LVGL实战指南 在嵌入式开发领域,显示界面的人机交互体验越来越受到重视。F1C200s作为一款性价比极高的国产ARM9芯片,搭配正点原子7寸LCD屏,能够构建出性能稳定、成本可控的嵌入式…...

2026届最火的降重复率方案推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术研究范畴之内,论文AI网站已然成了提升写作效率的关键工具,这种…...

主流Attention Backend技术选型与实战场景剖析

1. Attention Backend技术全景解析 当你用ChatGPT生成一段文字,或者让Stable Diffusion画一幅画时,背后都有一个关键组件在默默工作——Attention Backend。这就像汽车发动机里的涡轮增压器,虽然用户看不见,却直接决定了AI模型的&…...

亲测口碑好的物联网开发生产厂家分享

亲测口碑好的物联网开发生产厂家分享行业痛点分析在当前物联网开发领域,存在着诸多技术挑战。首先,设备兼容性难题突出,不同品牌、型号的物联网设备通信协议和接口各异,导致系统集成困难。数据表明,约 60%的物联网项目…...

革命性智能交互助手:Live2D AI如何重塑用户体验边界

革命性智能交互助手:Live2D AI如何重塑用户体验边界 【免费下载链接】live2d_ai 基于live2d.js实现的动画小人ai,拥有聊天功能,还有图片识别功能,可以嵌入到网页里 项目地址: https://gitcode.com/gh_mirrors/li/live2d_ai …...

**大模型Agent面试全解析:手把手带你拿下高薪Offer,小白也能收藏学!**

大模型Agent面试全解析:手把手带你拿下高薪Offer,小白也能收藏学! 本文分享了作者在阿里大模型Agent应用算法岗的三轮面试经历,涵盖Agent核心技术模块(规划、感知、工具、记忆)、微调、提示工程、算法设计、…...

AH1008:一款宽输入10-55V,输出5V/5A的高效同步整流降压DC-DC转换器

在电源管理芯片领域,宽输入电压范围与大电流输出能力往往是衡量产品实用性的重要指标。本文将介绍一款采用同步整流技术的降压型DC-DC转换器——AH1008,探讨其在10-55V输入转5V/5A应用中的技术特点与设计优势。宽输入电压范围,TEL&#xff1a…...

**一周快速上手:传统研发平台接入Agent开发能力的完整指南(含收藏)**

一周快速上手:传统研发平台接入Agent开发能力的完整指南(含收藏) 本文详细介绍了如何在一周内为传统研发平台接入Agent开发能力,采用Next.jsReact和LangGraph构建Agent状态图,通过系统提示词优化、RAG知识库建设&#…...

keil工程点击build报错FCARM - Output Name not specified, please check ‘Options for Target - Utilities‘

kile工程链接时报错FCARM - Output Name not specified, please check ‘Options for Target - Utilities’ 问题:拷贝了一个keil模板例程,对其中地一些代码文件路径做了调整,并重新添加了代码文件。编译没报错,点击buile链接时报…...

支承套零件加工工艺编程及夹具设计(论文 CAD图纸 开题报告 任务书 加工程序)

支承套作为机械传动系统中的关键零件,其加工精度直接影响设备运行的稳定性。针对该零件的加工工艺编程与夹具设计,需从零件结构特性出发,结合加工设备性能参数,制定科学合理的工艺方案。通过分析支承套的轴向定位孔、径向配合面等…...

旋架式加速度过载模拟实验台结构设计与分析(论文+CAD+SolidWorks+开题报告+任务书+外文翻译……)

旋架式加速度过载模拟实验台是机械工程领域中用于模拟极端加速度环境的关键设备,其核心作用在于为航天器、汽车零部件或高过载装备的可靠性测试提供可控的实验条件。通过旋架结构的旋转运动,实验台能够精确复现不同方向、不同幅值的加速度过载场景&#…...

掌握AI Agent,抢占未来先机:收藏这份小白进阶大模型指南!

掌握AI Agent,抢占未来先机:收藏这份小白进阶大模型指南! AI Agent正引领计算机交互革命,超越文本生成,通过“大脑规划工具调用记忆经验”直接操控应用与设备。本文解析其工作原理、行业竞争格局(OpenAI、…...

【VimRAG 】技术解析:阿里通义实验室多模态记忆图 RAG 框架深度剖析

文章目录VimRAG 技术解析:阿里通义实验室多模态记忆图 RAG 框架深度剖析一、引言二、问题根源:传统 RAG 在多模态场景下的三重困境三、核心架构:三大技术组件3.1 多模态记忆图(MMG)3.2 图调制视觉记忆编码(…...

小白程序员必看:零基础转型大模型应用开发,薪资涨幅超30%!收藏版学习路径分享

小白程序员必看:零基础转型大模型应用开发,薪资涨幅超30%!收藏版学习路径分享 本文分享了我从传统后端开发转型大模型应用开发的完整学习路径,分为入门启蒙、进阶夯实、核心突破、效率提升和思维升级五个阶段。重点介绍了提示词工…...

掌握MCP与Skill:大模型小白/程序员的收藏必备学习指南

掌握MCP与Skill:大模型小白/程序员的收藏必备学习指南 本文深入解析AI Agent中MCP与Skill的核心区别:MCP作为连接层解决"AI能访问什么"(外部数据/工具),Skill作为知识层解决"AI知道怎么做什么"&am…...

保姆级教程:用CBLPRD-330k数据集训练你的第一个车牌识别模型(附ResNet18+CTC实战代码)

从零构建车牌识别模型:CBLPRD-330k数据集实战指南 车牌识别技术作为计算机视觉领域的重要应用,正在智能交通、安防监控等场景中发挥越来越大的作用。对于刚入门的开发者来说,如何利用公开数据集快速搭建一个可用的车牌识别模型,往…...

OneAPI部署实操手册:从零配置到多渠道管理,支持腾讯混元、通义千问、文心一言等全生态

OneAPI部署实操手册:从零配置到多渠道管理,支持腾讯混元、通义千问、文心一言等全生态 你是不是也遇到过这样的烦恼?想用通义千问写代码,用文心一言做PPT,用腾讯混元分析数据,结果每个平台都要单独注册、单…...

从水处理到工控安全:WADI数据集在异常检测中的独特价值与应用场景解析

WADI数据集:工业控制系统异常检测的黄金标准与实践指南 工业控制系统(ICS)的安全防护一直是关键基础设施保护的核心议题。想象一下,一座城市的供水系统突然遭到网络攻击,导致水质异常或供水中断——这不仅会造成经济损失,更直接威…...

掌握Context Graph核心逻辑,小白程序员也能轻松入门大模型并收藏学习!

掌握Context Graph核心逻辑,小白程序员也能轻松入门大模型并收藏学习! Context Graph是当前企业AI领域的热点,掌握其核心逻辑有助于程序员和企业AI从业者快速跟上发展。它通过记录企业决策路径与执行过程,弥补了传统数据平台只关注…...

做不规则多变量时序预测,试试ReIMTS递归多尺度框架,我实验涨点明显!

不规则多变量时间序列的预测任务在医疗、气象等领域至关重要,但其面临着采样间隔不均和数据缺失两大挑战。传统方法难以在稀疏数据中捕捉可靠模式,而现有的大型预训练模型多为规则采样数据设计。 针对这些问题,研究者们提出了创新的解决方案…...

C#怎么操作Chart图表控件 C#如何用WinForms Chart控件绑定数据绘制统计图表【控件】

WinForms Chart控件需手动配置Series、ChartArea及数据源映射,否则图表空白或报错;必须设置XValueMember/YValueMembers(区分大小写)、ChartType,日期轴需格式化或转字符串绑定。WinForms 的 Chart 控件不是“绑定即显…...

普通人用基础C语言从零搭建NES模拟器,背后藏着这些局限

一、普通人觉得遥不可及,他用基础C语言做到了好多人一提到NES模拟器,首先就会觉得那是只有专业大佬才做得来的,不是依靠现成框架去拼接,就是凭借复杂技术去累计,普通人想要从零基础开始上手,根本就是不可能…...

【技术解读】DeWave:当离散编码遇见脑电波,开启无标记EEG到文本翻译新范式

1. DeWave:脑电波翻译技术的革命性突破 想象一下,你正躺在医院的病床上,因为某些原因无法说话,但医生和家属却能实时看到你脑海中想表达的文字——这听起来像是科幻电影中的场景,但DeWave技术正在让这种想象变为现实。…...

TB6612电机驱动避坑指南:STM32平衡小车常见问题与解决方案

TB6612电机驱动避坑指南:STM32平衡小车常见问题与解决方案 平衡小车项目是嵌入式开发者的经典练手项目,而TB6612作为一款性价比极高的电机驱动芯片,在STM32平衡小车中应用广泛。但在实际开发过程中,不少开发者会遇到电机不转、PWM…...

使用Nginx搭建文件服务器的全过程

为什么选择 Nginx 作为文件服务器 1.性能优势 高并发处理 - 轻量级,支持大量并发连接低资源消耗 - 内存占用少,CPU使用率低静态文件服务 - 专门优化过的静态文件传输高稳定性 - 长期运行稳定可靠 2.功能特性 简单的配置 - 配置文件简洁明了HTTP基本认证…...

linux安装mysql8.0全过程

查看服务器架构,下载对应安装包1uname -m2.上传解压包到usr/local解压安装包1tar -xvf mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz3.修改解压后的文件夹为mysql1mv mysql-8.0.27-linux-glibc2.12-x86_64 mysql4.创建mysql用户组和用户并修改权限123groupadd mysql…...

Linux删除文件名包含无效编码字符文件的方法

在Linux中,文件名包含无效编码字符或特殊不可见字符时,可能导致此文件无法通过常规方式选中或删除,可以通过下面方法处理1、确认文件名问题检查终端编码环境1echo $LANG # 默认应为 UTF-8(如 en_US.UTF-8)查看文件名…...

nginx+rtmp实现直播完整流程

一,环境准备 1.下载nginx-rtmp-module: 1 2 cd /www/server/ git clone https://github.com/arut/nginx-rtmp-module.git 2.Nginx安装: 这是用了宝塔哈。 软件商店 > 应用搜索:nginx > 安装 > 编译安装 > 添加自定义模块 模块…...

Nginx同端口部署多个vue以及unapp项目

同一个端口部署pc和app端项目,Nginx配置,前端打包配置解决方案配置pc端vue项目打包配置配置uniapp项目打包配置,manifest.json文件添加配置123456789101112131415161718192021222324252627"h5": {"router": {"mode&…...