Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法获取对象及其任何超类_Java_Generics_Casting_Superclass - Fatal编程技术网

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)