JFX 学习笔记 八 反射

xiaoxiao2022-06-12  42

反射关键字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社区,感谢他们翻译了这么多东西 :idea: 相关资源:jfx1.2.6示例 实现了java连接MT4
转载请注明原文地址: https://www.6miu.com/read-4932916.html

最新回复(0)