📅  最后修改于: 2023-12-03 14:56:31.183000             🧑  作者: Mango
在 Scala 中,我们可以使用 getClass()
方法来确定一个对象的类。该方法返回一个 Class
对象,其中包含了有关该类的信息。
以下是一个示例代码:
class Person(name: String, age: Int)
val p = new Person("Alice", 30)
val clazz = p.getClass()
println(clazz.getName())
println(clazz.getSimpleName())
上面的代码中,我们创建了一个名为 Person
的类,它接受两个参数:name
和 age
。接着,我们创建了一个名为 p
的 Person
对象。然后,我们通过调用 getClass()
方法获取了 p
的类信息,并将其保存在名为 clazz
的变量中。最后,我们使用 getName()
和 getSimpleName()
方法分别获取了该类的全名和简单名称,并将其打印出来。
以下是输出结果:
Person
Person
在 Java 和 Scala 中,每个类都有一个 Class
对象。该对象是由 JVM 在加载类时创建的,并包含了有关该类的所有信息,包括类的名称、方法、构造函数、字段等等。
例如,我们可以使用 Class.forName()
方法来加载一个类并获取其 Class
对象:
val clazz = Class.forName("java.lang.String")
println(clazz.getName())
println(clazz.getSimpleName())
上面的代码中,我们使用 Class.forName()
方法加载了 java.lang.String
类,并将其 Class
对象保存在名为 clazz
的变量中。接着,我们使用 getName()
和 getSimpleName()
方法分别获取了该类的全名和简单名称,并将其打印出来。
以下是输出结果:
java.lang.String
String
有了 Class
对象,我们可以轻松地获取有关类的所有信息。例如,我们可以使用 getMethods()
方法获取类中定义的所有公共方法:
class Person(name: String, age: Int) {
def getName(): String = name
def getAge(): Int = age
}
val p = new Person("Alice", 30)
val clazz = p.getClass()
for (m <- clazz.getMethods()) {
println(m.getName())
}
上面的代码中,我们在 Person
类中定义了两个方法:getName()
和 getAge()
。然后,我们创建了一个 Person
对象 p
,并使用 getClass()
方法获取了其 Class
对象。接着,我们使用 getMethods()
方法获取了该类中定义的所有公共方法,并将它们的名称逐个打印了出来。
以下是输出结果:
getName
getAge
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
除了 getMethods()
外,Class
对象还提供了很多其他方法,如 getConstructors()
、getFields()
、getDeclaredMethods()
、getDeclaredConstructors()
、getDeclaredFields()
等等。每个方法都有其特定的用途,可以帮助我们获取有关类的不同信息。
在 Scala 中,我们可以使用 getClass()
方法来确定一个对象的类,并获取有关该类的 Class
对象。该对象包含了有关类的所有信息,可以帮助我们了解类的结构、方法、字段等等。同时,Class
对象还提供了许多有用的方法,可用于获取有关类的不同信息。