【发布时间】:2011-09-22 23:42:30
【问题描述】:
如果类型T1和T2是基于类型T,而类型T只存在于NewT1()或NewT2(),那么函数func (*T) WhoAmI()有什么办法可以知道“真的”是T1 还是T2?
从技术上讲:
一旦t1 类型T1 被强制转换为T 类型所以func (*T) WhoAmI() 可以被调用,t1 是否完全失去了它的类型真的是T1 的事实?如果不是,我们如何从接收类型T的方法的角度回收知识?
笼统地说:
换句话说,如果一种类型是基于另一种类型的,如果派生类型的变量被强制转换为基类型来运行一个方法,那么该方法可以学习调用它的接收者的真实类型吗?
【问题讨论】:
-
我只是想到了
reflect.TypeOf。不幸的是,该函数将返回您转换为的类型。你确定要投吗?如果您使用的是接口,则根本不需要强制转换。 -
如果类型字段不同并且无法进行转换,那么转换可能会失败!?然后您可以尝试强制转换并捕获不可能的情况,从而知道它是哪种类型。在没有不同字段或方法的简单尝试中,这不起作用,因为强制转换显然有效。
-
这样想。你能说出
int(some_float)是什么类型吗?