我有一个类型T的泛型类,我想获得实例化时传递给该类的类型的名称。这是一个例子。
class MyClass<T> {
func genericName() -> String {
// Return the name of T.
}
}
我已经逛了好几个小时,但似乎找不到任何方法。有人尝试过吗?
任何帮助是极大的赞赏。
谢谢
单纯的快速方法是不可能的。
可能的解决方法是:
class MyClass<T: AnyObject> {
func genericName() -> String {
let fullName: String = NSStringFromClass(T.self)
let range = fullName.rangeOfString(".", options: .BackwardsSearch)
if let range = range {
return fullName.substringFromIndex(range.endIndex)
} else {
return fullName
}
}
}
这些限制取决于它仅适用于类的事实。
如果这是通用类型:
class TestClass {}
NSStringFromClass()
返回全名(包括名称空间):
// Prints something like "__lldb_expr_186.TestClass" in playground
NSStringFromClass(TestClass.self)
这就是为什么func搜索.
字符的最后一次出现。
测试如下:
var x = MyClass<TestClass>()
x.genericName() // Prints "TestClass"
更新Swift 3.0
func genericName() -> String {
let fullName: String = NSStringFromClass(T.self)
let range = fullName.range(of: ".")
if let range = range {
return fullName.substring(from: range.upperBound)
}
return fullName
}
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
问题内容: 有什么办法可以将Swift类型名称作为带有名称空间(或框架名称)的字符串? 例如,如果有一个名为的类,我想获取类似的字符串。 以下仅返回类名。 我还想获得框架名称作为名称空间。 问题答案: 用途: 从Xcode 7发行说明 : 默认情况下,现在可以打印类型名称和枚举大小写,并将其转换为String而不带限定符。或仍可用于获取完全限定的名称。
本文向大家介绍获取Java中基本类型的名称,包括了获取Java中基本类型的名称的使用技巧和注意事项,需要的朋友参考一下 该方法用于获取由类对象表示的实体名称,例如原始类型,接口,类,数组类,void等。这些名称以字符串形式返回。 给出了使用方法获得基本类型名称的程序,如下所示: 示例 输出结果 现在让我们了解上面的程序。 该方法用于获取原始数据类型的名称float,int和char。然后将这些名称
问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的
问题内容: Java中的类定义了用于检查给定参数是否与某些Unicode字符相等或属于某种类型类别的方法。这些字符和类型类别已命名。 由于在给定的javadoc说,对于名为字符的例子是 ,,…; 例如名为类型类别 ,… 但是,作为或值而不是枚举,这些类型的名称在运行时被“隐藏”。 因此, 是否有可能在运行时获取字符和/或类型类别的名称? 问题答案: JDK7将有一个 函数(READ:类java.l
问题内容: 我有一个列表,程序是这样的:。有什么方法可以使用T变量获取类的名称(因此我可以从内部知道T是否为String,Socket等)? 编辑:没关系,在这里找到了答案。 问题答案: 简短答案 :您不能。 长答案 : 由于使用Java实现泛型的方式,泛型T在运行时不会保留。您仍然可以使用私有数据成员: 用法示例: