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

免费做外贸网站常见的一级域名com代表

免费做外贸网站,常见的一级域名com代表,深圳网站平台,收费网站设计方案javafx阴影在 JavaFX的世界中#xff0c; Properties API允许UI开发人员将值绑定到UI控件。 这种功能出奇的简单#xff0c;但是当对象模型经常使用属性时#xff0c;应用程序可能会很快耗尽内存。 我通常会编写两个单独的对象#xff0c;例如pojo类和表示模型对象。 此技术… javafx阴影 在 JavaFX的世界中 Properties API允许UI开发人员将值绑定到UI控件。 这种功能出奇的简单但是当对象模型经常使用属性时应用程序可能会很快耗尽内存。 我通常会编写两个单独的对象例如pojo类和表示模型对象。 此技术通常在基于Swing的应用程序中使用。 从JavaFX角度来看您可以只创建一个具有属性的对象以允许观察者侦听器更新值。 听起来不错吧 不完全是因为主要问题是当所有对象的pojo属性字段都是还包装实际值的属性时程序员api的用户可能根本不想绑定或使用属性而只想访问实际值。 那么JavaFX开发人员该做什么 一个TreeTable控件持有雇员。 我经常访问Dirk Lemmermann的博客Pixel Perfect 该博客经常发布非常有用的JavaFX技巧。 最近Dirk在博客中发布了有关如何使用名为Shadow Fields的有趣模式来节省内存的信息。 要查看他的帖子请访问他的博客条目JavaFX Tip 23节省内存 属性的阴影字段。 。 Dirk的JavaFX技巧确实有助于解决上述问题减少堆但是我注意到必须存在样板代码才能 聪明地 确定 为调用者提供返回值是实际对象还是属性包装器对象。 例如该代码将返回int或Integer值而不是在调用get或set方法时返回IntegerProperty对象从而节省了内存。 此外代码声明了两个变量来保存两种值类型之一。 例如 private String _title Untitled; // shadow field private StringProperty title; 我觉得我可以使事情更简洁并可能节省更多的内存。 并减少样板代码。 我决定使用Java 8的默认方法创建一个接口该接口将处理管理实际值和属性。 API的用户将只创建一个实现以下接口的域类 界面属性访问器 一个提供访问器方法的接口以提供对实际对象值或JavaFX属性包装器对象的智能确定。 API的用户必须实现一种称为getModelProperties的方法该方法返回属性名字符串和值对象的映射。 该值可以是实际对象或属性类型对象。 下面的代码也将支持可观察列表。 package com.jfxbe;import javafx.beans.property.Property; import javafx.collections.FXCollections; import javafx.collections.ObservableList;import java.lang.reflect.Constructor; import java.util.ArrayList; import java.util.List; import java.util.Map;/*** Provide default methods to support the similar* capability of the shadow fields pattern.* To save memory object values dont have to be* wrapped into a Property object when using getters* and setters, however when calling property type methods* values will be wrapped into a property object.** Default methods for Observable lists are provided too.** Created by cpdea on 4/3/16.*/ public interface PropertyAccessors {MapString, Object getModelProperties();default T T getValue(String name, Object defaultVal) {Object p getModelProperties().get(name);p pnull ? defaultVal : p;return (T) ((p instanceof Property) ? ((Property) p).getValue(): p);}default void setValue(String name, Object value) {Object p getModelProperties().get(name);if (p instanceof Property) {((Property)p).setValue(value);} else {getModelProperties().put(name, value);}}default T T refProperty(String name, Class propClass, Class rawValType) {Object p getModelProperties().get(name);Property prop null;try {if (p null) {Class[] constructorTypes new Class[]{Object.class, String.class};ConstructorProperty propConstr propClass.getDeclaredConstructor(constructorTypes);prop propConstr.newInstance(this, name);} else if (rawValType.isInstance(p)) {Class[] constructorTypes new Class[]{Object.class,String.class, rawValType};ConstructorProperty propConstr propClass.getDeclaredConstructor(constructorTypes);prop propConstr.newInstance(this, name, p);} else {prop (Property) p;}getModelProperties().put(name, prop);} catch (Exception e) {e.printStackTrace();}return (T) prop;}default T ListT getValues(String name, ListT defaultValue) {Object p, o getModelProperties().get(name);p o;o onull ? defaultValue : o;if (!o.equals(p)) {getModelProperties().put(name, o);}return (ListT) o;}default T void setValues(String name, ListT newList) {Object list getModelProperties().get(name);if (list null || !(list instanceof ObservableList)) {getModelProperties().put(name, newList);} else {// Should the list be totally replaced? below clears and adds all itemsObservableListT observableList (ObservableListT) list;observableList.clear();observableList.addAll(newList);}}default T ObservableListT refObservables(String name) {List list (List) getModelProperties().get(name);if (list null) {list FXCollections.observableArrayList(getValues(name, new ArrayList()));getModelProperties().put(name, list);}if (! (list instanceof ObservableList)) {list FXCollections.observableArrayList(list);getModelProperties().put(name, list);}return (ObservableListT) list;} }员工阶层 一个名为Employee的类它实现PropertyAccessor接口。 在下面您会注意到每个字段的属性名称都是使用public static final String声明的 。 例如员工的名字是 public static final String NAME_PROPERTY “name”; 对于诸如gettersetter和xyzProperty之类的访问器方法您会在PropertyAccessor接口中注意到对默认方法的调用。 package com.jfxbe;import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.collections.ObservableList;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/*** A hybrid domain and model object using the shadow field pattern to save memory.* Created by cpdea*/ public class Employee implements PropertyAccessors{/** This is a map to hold properties and observables */private MapString, Object modelProperties;public static final String NAME_PROPERTY name;public static final String POWERS_PROPERTY powers;public static final String SUPERVISOR_PROPERTY supervisor;public static final String MINIONS_PROPERTY minions;public Employee(String name, String powers) {setName(name);setPowers(powers);}Overridepublic MapString, Object getModelProperties() {if (modelProperties null) {modelProperties new HashMap();}return modelProperties;}public final String getName() {return getValue(NAME_PROPERTY, );}public final void setName(String name) {setValue(NAME_PROPERTY, name);}public final StringProperty nameProperty() {return refProperty(NAME_PROPERTY, SimpleStringProperty.class, String.class);}public String getPowers() {return getValue(POWERS_PROPERTY, );}public final StringProperty powersProperty() {return refProperty(POWERS_PROPERTY, StringProperty.class, String.class);}public final void setPowers(String powers) {setValue(POWERS_PROPERTY, powers);}public final Employee getSupervisor() {return getValue(SUPERVISOR_PROPERTY, null);}public final ObjectPropertyEmployee supervisorProperty() {return refProperty(SUPERVISOR_PROPERTY, ObjectProperty.class, Employee.class);}public final void setSupervisor(Employee supervisor) {setValue(SUPERVISOR_PROPERTY, supervisor);}public final ListEmployee getMinions() {return getValues(MINIONS_PROPERTY, new ArrayList());}public final ObservableListEmployee minionsObservables() {return refObservables(MINIONS_PROPERTY);}public final void setMinions(ListEmployee minions) {setValues(MINIONS_PROPERTY, minions);}}结论 因此您已找到解决方案尝试消除两个变量和其他样板代码。 我实际上并没有使用大量数据来测试代码因此也许在另一篇文章中或某个幸运的读者会创建一个测试以比较所有三个对象具有所有属性Dirk和mine的实现。 与RMI服务器一起使用时此方法的可能缺点可能是序列化对象。 我敢肯定还有其他可能的缺点但是对于大多数用例而言这可能更容易处理和更简洁。 请随意发表评论 参考资料 https://dlemmermann.wordpress.com https://docs.oracle.com/javase/8/javafx/api/javafx/beans/property/Property.html http://blog.netopyr.com/2011/05/13/javafx-properties/ https://projectlombok.org http://www.jgoodies.com/freeware/libraries/binding 翻译自: https://www.javacodegeeks.com/2016/04/javafx-tips-save-memory-shadow-fields-properties-observables.htmljavafx阴影
http://icebutterfly214.com/news/76457/

相关文章:

  • 实用指南:RAM和ROM的定义和区别总结!!!
  • 2025 年宁波摄影培训人像摄影培训哪家好——路人贾摄影讲堂(宁波分公司)排名第一
  • Mac对于网络空间安全专业适用性踩坑点
  • 2025 年建德市摄影培训人像摄影推荐榜:路人贾摄影讲堂(建德市分公司)排名第一
  • React JSX 语法详解
  • React项目初始化
  • 15.5.手机设备信息 - 教程
  • 如何选择好的 GEO 服务商?2025年12月优质 GEO 服务商推荐
  • 2025年高铁T型螺栓,铝型材T型螺栓,管廊T型螺栓厂家推荐:安装便捷性与兼容性测评
  • 实用ai论文网站推荐:高效工具助力学术创作
  • 私护产品什么成分安全?起底幻颜之约生物蛋白与益生菌片中的专利乳酸杆菌
  • 05-自动生成设备节点的字符设备驱动
  • 详细介绍:HarmonyOS Divider组件深度定制:从基础分割到高级视觉表达
  • 幻颜之约是正规品牌吗?从研发实验室到10万级车间的品质承诺
  • 深入解析:Spring Boot常见问题
  • 专业的的压焊钢格板供应商推荐排行榜单?压焊钢格板供应商 压焊钢格板销售厂家 压焊钢格板制造厂 压焊钢格板生产商 压焊钢格板厂商 压焊钢格板企业 压焊钢格板供货商
  • 市面上高铅锡膏品牌推荐排行榜单?高铅锡膏品牌 高铅锡膏公司 高铅锡膏产品 高铅锡膏供应厂家 高铅锡膏工厂 高铅锡膏厂家 高铅锡膏生产厂家
  • 7款抖音保存视频去除抖音印记工具实测:免费无广谁称王?
  • 01组-2025K班现场编程任务
  • 实测10款快手怎么免费去水印工具:免费无广谁称王?
  • 解决代码中“魔法值”的问题
  • 数据库查询优化的三个实用方法
  • Dos基础
  • 2025/11/26 今天学习的是stl及其入门测试
  • 小程序开发2025推荐:多领域适配与高性价比兼具
  • 2025年民宿营地帐篷工厂权威推荐榜单:保温酒店帐篷/户外酒店帐篷/网红酒店式帐篷源头厂家精选
  • 2025/11/28 今天学习的内容是stl的vector的使用
  • 2025年PP/PE板材生产线制造商权威推荐榜单:TPE汽车脚垫设备/钙素板设备/石塑包装箱生产线源头厂家精选
  • 2025年BIPV防水光伏支架定做厂家权威推荐榜单:BIPV楼面光伏支架/BIPV光伏支架‌/BIPV建筑光伏支架‌源头厂家精选
  • 【设计模式笔记10】:简单工厂模式示例 - 详解