`
suifongqi
  • 浏览: 55572 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JFX 学习笔记 八 反射

    博客分类:
  • JAVA
阅读更多
反射关键字class
System.out.println(1.class.Name) // prints "Number"
System.out.println("Hello".class.Name); // prints "String"

class X {
attribute a: Number;
}
var x = new X();
System.out.println(x.class.Name); // prints "X"
System.out.println(sizeof x.class.Attributes); // prints 1
System.out.println(x.class.Attributes[0].Name); // prints "a"
——————————————————————————————————
class X {
attribute a: Number;
}
var x = new X();
x.a = 2;
System.out.println(x[x.class.Attributes[Name == 'a']]); // prints 2
————————————————————————————————————
在JavaFX中,类的成员函数和操作本身被模式化作为在目标类中的类,而形参和返回值被表示为属性。代表目标对象的属性名是“this”。代表返回值的属性名为“return”。代表形参的属性具有和形参相同的属性名。

译者注:这里的目标类是指使用成员函数和操作的类。而目标对象则指使用成员函数和操作的对象。

从上例中可以发现,你也可以从Class对象中获取相同的、被反射的操作。

被反射的操作能够像函数那样通过将目标对象作为第一个参数、其它参数作为后面的参数的方式被调用:

import java.lang.System;

class X {
operation foo(n: Number): Number;
}

var x = new X();
var op = x.class.Operations[Name == 'foo'];
System.out.println(op(x, 100));

// the above code is equivalent to the following non-reflective code:
System.out.println(x.foo(100));

bean属性和Java类的公共字段被反射为JavaFX属性。但是,Java方法不能被反射为JavaFX操作。如果你想调用某个Java方法,那么你可以通过简单地使用Java API来实现。

注意:与Java不同的:在JavaFX中class操作符被用于表达式,而不是用于类型名(type name)。因此作为补充,JavaFX支持从类型名中获取反射类对象的语法:

:TypeName

For example:

import java.lang.System;
System.out.println(:System.Name); // prints "java.lang.System"
System.out.println(:System.class.Name); // prints "Class"

广度(Extents)和枚举
类的“广度”,即此类的所有实例的集合,能够通过以下语法获得:

*:ClassName

例如,下面的代码打印出String类的所有实例:

import java.lang.System;

for (i in *:String) {
System.out.println(i);
}

注意:这是可选特性,默认情况下是失效的。

JavaFX也提供了声明类的命名实例的能力:
objectName:ClassName

例如:

import java.lang.System;

myString:String = "This is a string";

System.out.println(myString:String);

这样的命名实例是全局可访问的,但通常必须使用类名进行限制。然而,在属性初始化程序和赋值的上下文中,表达式类型的命名实例被引入到了词法作用域(lexical scope)(可见性弱于变量和属性),并可以通过使用它们的无限定名(unqualified names)引用这些命名实例:

Button {
mnemonic: P
text: "Press Me"
}
在上面实例中,由于Button的mnemonic属性是KeyStroke类型的,因此我能够通过使用它的无限定名访问其命名值P,而在别处我将不得不使用P:KeyStroke来引用它。

JavaFX使用与Java1.5同样的语法来访问枚举类型值:

import java.lang.management.MemoryType;

var heap = HEAP:MemoryType;
var nonHeap = NON_HEAP:MemoryType;

————————————————————————————————
JFX中使用例子与部分文字说明来自于:openjfx社区,感谢他们翻译了这么多东西

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java1.8版本,jre,jfx

    在Java 8中,还有其他一些重要特性,例如改进的日期和时间API(java.time包),新的Stream API,这使得数据处理更加高效和简洁,以及对反射和注解处理的增强。这些特性极大地提升了Java作为编程语言的生产力和灵活性...

    emed6004jfx工具`

    标题中的"emed6004jfx工具"很可能是指一个特定的软件或应用程序,而`.rar`文件格式表明这是一个压缩包,通常用于存储和传输多个文件。从描述中我们可以看到,这个压缩包的名字是`emed6004jfx.rar`,并且要求字符数...

    JFX例子

    JFX的例子是学习JavaFX的基础,通过这些示例,初学者可以快速了解并掌握JavaFX的基本概念和技术。 在提供的文件列表中,我们可以看到两个部分的教程:“JavaFX发现之旅:JavaFX Script With Eclipse 入门”。这部分...

    俄罗斯方块jfx源代码

    总的来说,“俄罗斯方块jfx”源代码为我们提供了一个学习和研究JavaFX游戏开发的实例,从中我们可以学到JavaFX的图形渲染、事件处理和游戏逻辑设计等多个方面的知识。无论你是Java初学者还是希望提升图形界面编程...

    欧码简音5JFX输入法

    简音输入法是专为希望学好中文发音,又希望超快 地输入汉字的人设计的,单字平均出字仅1.26码,远比 同类音码快;输入编码后视屏可同显简体和繁体,极有 利于学记各简体繁体字的对应模样,同屏对比了解简体 ...

    nj4x-mt4开发中间件jfx 2.7.7版本

    MT4客户端不支持二次开发,但是服务器接口对外开发,jfx封装了Java接口,使得Java开发程序员可以轻易上手

    JFX3DModelImporters_EA_2014-02-09_jfx3d_JFX3DModelImporters_ea_源

    这个压缩包"JFX3DModelImporters_EA_2014-02-09_jfx3d_JFX3DModelImporters_ea_源"包含了一系列的jar包,它们专门设计用于帮助开发者将不同格式的3D模型导入到JavaFX应用中。这些导入器的早期访问版本(EA)发布于...

    jfx1.2.6示例 实现了java连接MT4

    一个简单的实现了java连接MT4服务的例子

    javafx经典教材,机不可失。。。

    一些关于javafx的教程,能很好的了解javafx!

    GameOfLife-JFX:初始项目

    总结,"GameOfLife-JFX:初始项目"是一个很好的学习和实践JavaFX以及理解生命游戏原理的平台。通过这个项目,开发者不仅可以提升JavaFX编程技巧,还能深入理解细胞自动机和复杂系统行为的模拟。

    Mimaki JFX plus Series UJF-3042 透明液体打印指南

    ### Mimaki JFX plus Series UJF-3042 透明液体打印指南 #### 一、概述 Mimaki JFX plus Series UJF-3042是一款专为工业级UV喷墨打印设计的产品,它支持特殊效果打印,如透明液体打印等功能。该设备结合了先进的...

    NativeJFX:一个使用maven jfx插件和其他工具生成本机可执行文件和安装程序的演示应用程序

    本机JFX 一个使用maven jfx插件和其他工具生成本机可执行文件和安装程序的演示应用程序 构建本机捆绑包(Windows) 安装 5.5.6+ 安装 3.1.0+ 将两个程序都添加到PATH 运行mvn package 注意:制作启动器并与JRE...

    jfx_game_project:game_prject_table_Type

    【标题】"jfx_game_project:game_prject_table_Type"是一个基于JavaFX开发的游戏项目,其核心特性在于利用表格(Table)元素来呈现游戏数据或交互。JavaFX是Oracle公司提供的一个用于创建桌面应用程序的开源Java库,...

    jfx-launcher:openjfx启动器工具

    JFX-Launcher 一个openJfx的自动更新器,采用模块化API加载模块。 原理 在Launcher启动的时候,会对比本地配置与服务端配置是否一致,如果服务端配置与本地不一致,则进行拉取同步。 对比条件: 版本号是否一致 各个...

    java8看不到源码-JME3-JFX:用于JME的JFXGui桥接器,具有用于常见用例的有用实用程序

    笔记 对于 jme 3.1: 版本:2.+ 分支:主 对于 jme 3.0(与 jme-3.0.10 兼容): 版本:1.+ 分支:jme_3.0 JME3-JFX 需要 java 8,但是可以使用 java 7 在纹理上绘制视频。对于 jME SDK,您应该创建一个 java 8 平台...

    MessagingApp-JFX:具有多选项卡用户界面的聊天应用程序

    MessagingApp-JFX 具有多选项卡UI(使用JavaFX构建)的聊天应用程序。 通过TCP / IP进行通信的服务器-客户端模型。 为JVM和Arduino微控制器编写的服务器/后端代码库(测试平台为ESP32s开发板)。 文件传输功能。

    j8draw:JDK8中的JFX 2D和3D绘图

    JDK8中的JFX 2D和3D工程图。 由于它使用的是JFX,因此需要确保您使用的是Oracle的JDK 1.8或更高版本。 如果在Eclipse中运行,由于即使在使用Oracle JDK时默认情况下也无法访问JFX,因此您将需要执行以下步骤,...

    FreshInvoice_jfx82w_FreshInvoice_

    标题中的"FreshInvoice_jfx82w_FreshInvoice_"似乎是指一个特定的版本或构建号,这通常是软件更新或发布时使用的标识符。FreshInvoice是一个知名的开源PHP发票管理软件,它允许用户创建、管理和发送专业发票。这个...

    JFX的简单回顾以及了解

    JavaFX是一个用于创建富互联网应用程序的Java库,它提供了丰富的图形用户界面(GUI)功能,允许开发者编写跨平台的应用程序。这些应用程序可以在多种设备上运行,包括桌面、移动设备、电视和平板电脑。...

    demux-jfx-core-0.8.2.zip

    标题中的"demux-jfx-core-0.8.2.zip"是一个开源项目的版本压缩包,主要涉及的是JavaFX相关的库或框架。JavaFX是Oracle公司提供的一个用于开发桌面、移动和嵌入式设备的富客户端应用程序的平台。它提供了一组图形和...

Global site tag (gtag.js) - Google Analytics