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

如何优雅打印一个Java对象

本篇文章,我们来探讨一下如何优雅打印一个 Java 对象。 真没想到,这个问题的访问量像阿尔泰山一样高,访问量足足有 29+ 万次,这不得了啊!说明有很多很多的程序员被这个问题困扰过。...以及如何打印一个对象的列表(数组或者集合)呢? 如果大家也被这样的问题困扰过,或者正在被困扰,就请随我来,咱们肩并肩手拉手一起梳理一下这个问题,并找出最佳答案。...所有的 Java 对象都默认附带了一个 toString() 的方法,当我们尝试打印这个对象的时候,该方法就会被调用。...System.out.println(object); // 调用 object.toString() toString() 方法由 Object 类(所有 Java 对象的超类)定义,该方法会返回一个看起来晦涩难懂的字符串...这就是为什么对象数组的前缀是“[L”的原因。是不是有一种恍然大悟的感觉? 02、自定义输出 如果想在打印的时候输出自己预期的结果,就必须在自定义类中重写 toString() 方法,来看例子。

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

如何优雅对象所有方法添加异常处理

比如一个对象所有方法,都应该做异常处理,但是,如果每个方法都加 try catch 又太麻烦: const obj = { aaa() { try {...代理模式是通过对目标对象做一层包装,提供和目标对象同名的方法,最终的功能实现还是调用目标对象的方法,但可以额外添加一些职责,比如日志、权限等,透明对目标对象做一些扩充。...,然后又提供了运行异步方法的 runner 函数,对异步的异常做了处理,结合这两种方式,优雅给目标对象所有方法加上了异常处理。...因为这段逻辑是我 Nest.js 源码里摘出来的,它源码里就是这样来给对象添加异常处理的: 异步逻辑也是单独提供了个方法来运行: 我觉得这个透明给对象添加异常处理的方式很优雅,就把它从 Nest.js...结合代理 + 提供运行异步方法的 runner 这两种方式,就能给一个没有做任何异常处理的对象加上异常处理。是不是很优雅~

68720

去解决更多的问题,不是如何最好解决一个问题

如果这样,不是所有人都走上巅峰了吗?没有人开始不努力,为什么后来不努力,因为努力没有效果。"...成功的人生是台阶式向上,不是一条水平线。努力只是说明你拼命在走,跟你能不能向上走,关系不大。那些努力却没有结果的人,根本原因就在于,他一直走在平面上,没有走到更高的台阶。...你把同一件事情勤奋做上十遍,还是只会做这一件事;你做完这件事后,再去挑战更难的事情,就有机会学会做两件事。 初学者经常问我,前端开发应该学习哪一个框架?...我的回答就是,你觉得哪一个框架比较容易,就用那个。因为它们都是解决同样的问题,你只要知道怎么解决就可以了,没必要深究哪一个解决得更好。...对你更重要的是,要去解决更多的问题,不是如何最好解决一个问题。 只有通过解决更多的问题,人生才能摆脱水平运动,进入上升运动。

71140

面试官:为什么data属性是一个函数不是一个对象

一、实例和组件定义data的区别 vue实例的时候定义data属性既可以是一个对象,也可以是一个函数 const app = new Vue({ el:"#app", // 对象格式...如果为组件data直接定义为一个对象 Vue.component('component1',{ template:`组件`, data:{ foo...警告说明:返回的data应该是一个函数在每一个组件实例中 二、组件data定义函数与对象的区别 上面讲到组件data必须是一个函数,不知道大家有没有思考过这是为什么呢?...... } 定义data会进行数据校验 源码位置:/vue-dev/src/core/instance/init.js 这时候vm实例为undefined,进入if判断,若data类型不是...data可以是对象也可以是函数(根实例是单例),不会产生数据污染情况 组件实例对象data必须为函数,目的是为了防止多个组件实例对象之间共用一个data,产生数据污染。

3.1K10

WPF 判断一个对象是否是设计时的窗口类型,不是运行时的窗口

当我们对 Window 类型写一个附加属性的时候,在属性变更通知中我们需要判断依赖对象是否是一个窗口。但是,如果直接判断是否是 Window 类型,那么在设计器中这个属性的设置就会直接出现异常。...那么有没有什么方法能够得知这是一个设计时的窗口呢?这样就不会抛出异常,而能够完美支持设计器了。 ---- 方法一:判断设计时属性 WPF 原生自带一个附加属性可以判断一个依赖对象是否来源于设计器。...不过,如果我们希望得到更多的设计器支持,不是像上面那样直接 return 导致此属性在设计器中一点效果都没有的话,我们需要进行更精确的判断。...16 17 18 19 20 21 22 23 24 25 public static class WalterlvDesignTime { /// /// 判断一个依赖对象是否是设计时的...} else { // 这不是一个窗口,需要抛出异常。

26240

基础渲染系列(十六)——静态光照

延迟渲染使我们可以使用很多灯光,但是阴影仍然是一个限制因素。如果场景是动态的,那么我们将不可避免执行这些计算。但是,如果光源和几何物体都不变,那么我们可以只计算一次光源并重复使用它。...在本教程中,我们会一路把所有内容烘焙到光照贴图中。以确保不会有任何动态光照。 为了进行光照贴图的效果展示,创建了一个简单的测试场景,该场景具有一个提供阴影的简单结构,以及在其周围和内部放置的一些球体。...它使用材质的渲染类型来确定如何处理表面,这应该告诉我们我们的对象是半透明的。实际上,它确实知道屋顶是半透明的,只是将其视为完全不透明。...但是,我们实际上不是为照相机渲染,而是为光照贴图渲染。我们正在将颜色与光照贴图中展开的对象的纹理相关联。要执行此映射,必须使用光照贴图坐标不是顶点位置,并进行适当的转换。 ?...事实证明,要使它在所有机器上都可以使用,即使我们不使用顶点位置的Z坐标,也必须以某种方式使用它。Unity的着色器为此使用了一个虚拟值,因此我们将简单做同样的事情。 ?

3.5K20

浏览器内核之渲染基础

一个 RenderObject 对象保存了为绘制 DOM 节点所需要的各种信息,例如样式布局信息,经过 WebKit 的处理之后,RenderObject 对象知道如何绘制自己。...RenderObject 树是基于 DOM 树建立起来的一棵新树,是为了布局计算和渲染等机制构建的一种新的内部表示。RenderObject 树节点和 DOM 节点不是一一对应关系。...image.png 首先,图中 ‘layer at(x,x)’ 表示的是不同的 RenderLayer 节点,下面所有 RenderObject 子类的对象均属于该 RenderLayer 对象。...3D 绘图上下文,不是在遇到 ”canvas“ 元素时创建新的 RenderLayer 对象。...当渲染该页面的全部或者部分时,ScrollView 类请求按照从前到后的顺序遍历并绘制所有 RenderLayer 对象的内容到目标的位图中

79520

Flutter 调试工具篇 | 壹 - 使用 Flutter Inspector 分析界面

当前组件对应的渲染对象树,受到的 父级约束 [2]. 当前组件对应的渲染对象树,其在界面中的 尺寸 [3].... Layout Explorer 可视化将这些信息展示出来,就非常便于我们去分析布局的细节。 ---- 在面板右侧,有一个 Widget Datails Tree 的选项卡,是极其重要而有用的。...以及最重要的 某个 Widget 对应的渲染对象 renderObject,渲染对象中,可以进一步分析约束、尺寸、数据等信息。...细致入微去了解当前界面中展示的逻辑,这样内部寻找病因,就能更精准对症下药。 ---- 3. 选择模式与具体组件分析 选择模式 Select Widget Model 是一个非常好用的工具。...这就可以大大提高查看界面视图中每个组件构建信息的效率,不必一个个自己手动去找。

65420

基础渲染系列(七)——阴影

但支持柔和阴影,但这是一种阴影过滤技术,不是半影模拟。) 1.1 启用阴影 没有阴影,很难看到对象之间的空间关系。为了说明这一点,我创建了一个带有几个拉伸立方体的简单场景。...只是更加有效使用了纹理像素。不利的一面是,我们现在必须将场景渲染三遍。 在渲染到屏幕空间阴影贴图时,Unity会正确的级联中进行采样。...而且,无论质量设置如何,都可能发生这种情况。 阴影图中的每个纹理像素代表光线照射到表面的点。但是,纹素不是单点。它们最终会覆盖更大的区域。它们与光的方向对齐,不是与表面对齐。...如果将它们翻转,则表示你的图形API(Direct3D)的屏幕空间Y坐标从下到下(不是向上)0到1。要同步的话,请翻转顶点的Y坐标。 ? ?...它可以编译,但是灯光范围内的所有对象最终都变成黑色。阴影贴图有问题。 ? (错误的阴影贴图) 当你通过帧调试器检查阴影贴图时,你会发现每个灯光不是渲染一张,而是渲染六张贴图。

3.9K30

基础渲染系列(十七)——混合光照

你可以在下面的屏幕截图中看到完全实时照明和完全烘焙照明之间的区别。这是上一教程中的场景,除了我使所有球体都动态化并重新定位了一些。其他一切都是静态的。使用正向渲染路径。 ? ?...光照贴图用于将间接光添加到静态对象不是球谐函数或探针。动态对象仍将光探针用作间接光。 ?...发生这种情况时,是因为在某些情况下UNITY_SHADOW_COORDS错误创建了一个插值器,即使实际上并不需要它,TRANSFER_SHADOW也不会初始化它,从而导致错误。...为了说明这一点,下面是添加了一个聚光灯后的带有光照贴图的屏幕截图。其中之一变成了烘焙光,你可以在强度图中清楚看到它。 ? ?...可以简单CreateLight复制代码。 ? 接下来,我们必须弄清楚如果使用实时照明,将接收多少光。我们假定此信息与光照图中的内容匹配。

2.5K40

【WPSJS主题】使用json配置文件自动生成网页表单控件页面,让面向业务的开发开归本质。

1、字段约束根据配置文件定义自动生效 如上图中说到,每个网页表单控件中,根据我们定义的字段类型和其他规范要求,相应在网页控件渲染出来后,这些约束已经在生效了,例如是枚举字段时,会渲染一个下拉选择框,...2、窗体表单用户填写好的数据,可轻松采集到位 以下图中,点击提交后,整个表单将以一个json对象数据的方式返回,不用再一个个表单控件去查找用户输入的值。 ?...4、将返回的json对象和源对象合并处理 我们首先手头上有一个初始化时的json对象,而用户界面交互操作后得到了一个新的json对象(注意非必填项为空时,新对象会没有这个节点数据),如何快速将新的json...例如笔者在开发Vega图表时,本身就有一个初始化的json属性供Vega库来调用配置相关的属性,用户交互更新了这些属性,如何快速将其映射到原来的json对象中,让代码读取原结构即可实现更新效果。...七、结语 本文给大家分享了近期一路探索的关于json、json schema、自动化渲染网页表单等主题,文中大家看到的几个库,是笔者经比较试错后,同类主题中,亲身试用并发现其可行性及价值点的。

1.4K20

使用json配置文件自动生成网页表单控件页面,让面向业务的开发开归本质。

1、字段约束根据配置文件定义自动生效 如上图中说到,每个网页表单控件中,根据我们定义的字段类型和其他规范要求,相应在网页控件渲染出来后,这些约束已经在生效了,例如是枚举字段时,会渲染一个下拉选择框,...2、窗体表单用户填写好的数据,可轻松采集到位 以下图中,点击提交后,整个表单将以一个json对象数据的方式返回,不用再一个个表单控件去查找用户输入的值。 ?...4、将返回的json对象和源对象合并处理 我们首先手头上有一个初始化时的json对象,而用户界面交互操作后得到了一个新的json对象(注意非必填项为空时,新对象会没有这个节点数据),如何快速将新的json...例如笔者在开发Vega图表时,本身就有一个初始化的json属性供Vega库来调用配置相关的属性,用户交互更新了这些属性,如何快速将其映射到原来的json对象中,让代码读取原结构即可实现更新效果。...七、结语 本文给大家分享了近期一路探索的关于json、json schema、自动化渲染网页表单等主题,文中大家看到的几个库,是笔者经比较试错后,同类主题中,亲身试用并发现其可行性及价值点的。

2.1K30

深入理解ReactDOM.render 是如何串联渲染链路全过程的

图中你可以看到,ReactDOM.render 方法对应的调用栈非常深,中间涉及的函数量也比较大。...上述过程中构建出的这棵 Fiber 树,也正是大名鼎鼎的 workInProgress 树。 相应图中 current 指针所指向的根节点所在的那棵树,我们叫它“current 树”。...图中可以看出,虽然人们习惯上仍然将眼前的这个产物称为“Fiber 树”,但它的数据结构本质其实已经树变成了链表。...render 阶段的工作目标是找出界面中需要处理的更新 在实际的操作中,并不是所有的节点上都会产生需要处理的更新。...那么当所有节点的 completeWork 都执行完毕时,我是不是就可以“终极父节点”,也就是 rootFiber 上,拿到一个存储了当前 Fiber 树所有 effect Fiber的“终极版”的

44310

第四章-使用本机文件对话框和帮助进程间沟通 | Electron实战

在这章的最后,渲染进程的浏览器窗口中的“打开文件”按钮将从主进程触发“打开文件”对话框。在此之前,有必要更深入讨论一下如何在进程之间进行通信。我们第3章的分支开始,可以在第三章代码找到它。...在macOS中,我们能够窗口顶部从表格的形式显示对话框,不是显示在窗口前面(清单4.6)。...图4.8 在macOS中,打开文件对话框现在从菜单的标题栏下拉,不是作为应用程序窗口前面的附加窗口出现。 ---- 促进进程间通信 我们已经编写了用于在主进程中选择和读取文件的所有代码。...我们的众多的渲染器读取和写入文件系统可能会出现问题;一个或多个进程试图同时写入同一个文件,或者从一个文件中读取,一个渲染器进程正在重写该文件。.../main.js'); 现在,我们可以在渲染器进程中调用主进程导出getFileFromUser()函数。让我们替换事件监听器中的功能,以触发Open File对话框,不是触发警报。

1.9K20

深入理解ReactDOM.render 是如何串联渲染链路的全过程

图中你可以看到,ReactDOM.render 方法对应的调用栈非常深,中间涉及的函数量也比较大。...上述过程中构建出的这棵 Fiber 树,也正是大名鼎鼎的 workInProgress 树。 相应图中 current 指针所指向的根节点所在的那棵树,我们叫它“current 树”。...图中可以看出,虽然人们习惯上仍然将眼前的这个产物称为“Fiber 树”,但它的数据结构本质其实已经树变成了链表。...render 阶段的工作目标是找出界面中需要处理的更新 在实际的操作中,并不是所有的节点上都会产生需要处理的更新。...那么当所有节点的 completeWork 都执行完毕时,我是不是就可以“终极父节点”,也就是 rootFiber 上,拿到一个存储了当前 Fiber 树所有 effect Fiber的“终极版”的

87510
领券