惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
S
SegmentFault 最新的问题
量子位
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 司徒正美
博客园 - Franky
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
B
Blog RSS Feed
C
Check Point Blog
The Cloudflare Blog
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
V
Visual Studio Blog
V
V2EX
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 聂微东
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

回忆中的明天

自己写一个Web 端的MiMo TTS Chat,方便实现文本转语音,API限免中 · 回忆中的明天 NVIDIA NIM 开发平台,提供超多免费大模型 · 回忆中的明天 iTranslation 简单快捷的翻译软件,支持数十种语言互译 · 回忆中的明天 国内外免费大模型平台,支持 API 调用的超多免费大模型 · 回忆中的明天 SiliconFlow 硅基流动一站式大模型云服务平台,提供超多免费大模型 · 回忆中的明天 Xiaomi MiMo 小米大模型团队开发的大语言模型,开源限免中…… · 回忆中的明天 BigModel 智谱大模型开放平台,提供超多自研免费大模型 · 回忆中的明天 OpenRouter 模型聚合平台,提供超多免费模型使用 · 回忆中的明天 iReader 英语点读学习系统,译林小学英语在线点读 · 回忆中的明天 ZenMux 企业级大模型聚合平台,提供免费试用模型 Gemini 3 Pro · 回忆中的明天 英语学习,新概念英语在线点读、全文朗读学习系统 · 回忆中的明天 iGSTT(Gemini STT) 开源免费的语音转文本(STT)的命令行工具 · 回忆中的明天 Python 项目打包,并上传到 PyPI,分享项目 · 回忆中的明天 iGTTS(Gemini TTS) 开源免费的文本转语音(TTS)的命令行工具 · 回忆中的明天 iChat(AI Chat) 智能聊天工具,支持 MiMo、DeepSeek、Gemini、Grok、OpenAI和自定义AI · 回忆中的明天 NanoPi R2S 安装 Debian 固件系统,旁路由网络代理内网转发,决解直连网络卡顿 nftables · 回忆中的明天 NanoPi R2S Armbian Linux 旁路由网络代理内网转发,决解直连网络卡顿 iptables · 回忆中的明天 sing-box rule-set · 回忆中的明天 Xcode 最全最实用的快捷键列表 · 回忆中的明天 SwiftUI 中的@State、@Bindable和@Binding · 回忆中的明天 免费的图床服务器-GitHub Pages · 回忆中的明天 A Free Native Image Uploading Tool for macOS · 回忆中的明天 免费的图床服务器-Cloudflare-R2 · 回忆中的明天 图传 (iUploader) - macOS 免费原生图床上传利器 · 回忆中的明天 本地无法加载托管到Cloudflare中的图片等资源,权限错误403 · 回忆中的明天 国内、外免费公共的DNS,支持的DoH,防止污染、篡改的问题 · 回忆中的明天 macOS 系统下载和安装 · 回忆中的明天 使用 CURL 命令调试和诊断网络问题,网站请求测速 · 回忆中的明天 WARP Beta for macOS 支持新协议 MASQUE · 回忆中的明天 2024年自用国外靠谱的 VPS 服务器推荐 · 回忆中的明天
Java 反射实例操作 · 回忆中的明天
2020-08-23 · via 回忆中的明天

原文:https://ichochy.com/posts/java/20200823.html


反射可以在代码运行时,动态的获取对象、调用方法、设置属性。动态操作,降低代码偶合性,提高灵活度。其JDBC库就是通过反射加载。

实例操作

以操作User对象为例:

/*
 * File:User.java
 * User:iChochy
 * URL:https://ichochy.com
 * Copyright (c) 2020
 * Date:2020/08/31 10:18:31
 */

package com.ichochy.example;

public class User {
    private String name = "iChochy";
    private int age = 32;
    private String url = "https://ichochy.com";

    public void display(){
        System.out.println("Name:"+name);
        System.out.println("Age:"+age);
        System.out.println("URL:"+url);
    }
}

正常调用

User user = new User();
user.display();

获取对象

类动态获取

//获取类
Class<?> clazz = User.class;
//获取对象
Object obj = clazz.newInstance();

类路径获取

//获取类
Class<?> clazz = Class.forName("com.ichochy.example.User");
//获取对象
Object obj = clazz.newInstance();

获取属性

获取全部

Field[] fields = clazz.getDeclaredFields();
for (Field field: fields) {
    System.out.println(field.getName());//name、age、url
}

属性名获取

Field field = clazz.getDeclaredField("age");
System.out.println(field.getName());//age

设置属性

Object obj = clazz.newInstance();
Field field= clazz.getDeclaredField("age");//获取私用属性
field.setAccessible(true);//设置反射访问权限检查
System.out.println(field.get(obj)); //32
field.set(obj,18);//设置属性
System.out.println(field.get(obj));//18

获取方法

获取全部

Method[] methods = clazz.getMethods();
for(Method method:methods){
    System.out.println(method.getName()); //display
}

方法名获取

Method method = clazz.getMethod("display");
System.out.println(method.getName()); //display

调用方法

Object obj = clazz.newInstance();
Method[] methods = clazz.getMethods();
for(Method method:methods){
    //调用 display 方法
    if("display".equals(method.getName())){
        method.invoke(obj);
    }
}

方法名调用

Object obj = clazz.newInstance();
Method method = clazz.getMethod("display");
method.invoke(obj);