Java 方法获取对象及其任何超类
实现 应采用一种方法Java 方法获取对象及其任何超类,java,generics,casting,superclass,Java,Generics,Casting,Superclass,实现 应采用一种方法信号 任何对象N 对象的任何超类类都使用如下内容: Object object=new Object(); Class c = object.getClass(); signal(object, c); 把我的评论变成答案 我可以很快想到两种方法: 直接在此处使用Object.class信号(对象,对象.类)编译良好,在我的java版本上没有警告 将方法签名更改为以下内容: <N, M extends N> void signal(N n, Class<
信号
N
类都使用如下内容:
Object object=new Object();
Class c = object.getClass();
signal(object, c);
把我的评论变成答案
我可以很快想到两种方法:
直接在此处使用Object.class
<代码>信号(对象,对象.类)代码>编译良好,在我的java版本上没有警告
将方法签名更改为以下内容:
<N, M extends N> void signal(N n, Class<? super M> n_super)
void signal(N N,class根据“实际结果类型为Classif”的文档,如果要传入超类,请使用object.getClass().getSuperclass() instead@Pshemo谢谢你的反馈,我同意!那么,有没有办法消除警告?使用Object.class
应该可以编译得很好。你也可以对此进行更多的黑客攻击,并将你的方法声明为void signal(A,ClassA,警告现在是关于类型安全的,但是谢谢!@passi修辞:在任何情况下获取对象及其超类怎么可能是安全的?@Wolfpack'08^^太好了!非常感谢你们打开我的眼睛。你们都是一个很酷的社区。尽管如此,即使尝试了,我还是无法实现第二种方法……有什么提示吗?@passi:Wha它阻止了你用这种方式实现它?在实践中展示了它。我同意,这在理论上应该是可能的,并且将是一个非常漂亮的解决方案。尝试这一点仍然不起作用(既不是示例,也不是你的第二种方式):@Passi:Hmm…我在工作时在我的JVM上尝试了这一点,当我回答时,它很好(显然,在我上面发布的IDEOne示例中使用的一个很好)。但是在我的家用计算机(不同的操作系统)上测试它时,它给出了与您看到的相同的错误(即使我的IDE没有将其突出显示为错误)。也许这是不同操作系统的java版本之间的缺陷/差异。抱歉:/。
Object object=new Object();
Class c = object.getClass();
signal(object, c);
<N, M extends N> void signal(N n, Class<? super M> n_super)