采用 Object 及其任何超类的方法

Method taking an Object and any of its superclasses

实现。

一个方法signal应该采用

  1. 任何对象N
  2. 对象的任何 超类 Class<?super N>
<N>void
signal(N n, Class<?super N> n_super)
{
  /*...*/
}

打电话应该就可以了

Object object=new Object();
signal(object, object.getClass());

因为 Object object 的超类型。但是调用它会给出 警告。在IDE话中:

IntelliJ(Android工作室)

Wrong 2nd argument type. Found Class<? extends Object>, required: Class<? super Object>

日食

The method signal(N, Class<? super N>) is not applicable for the arguments (Object, Class<? extends Object>)

问题。

  1. 能否实现目标,我试过的方式,如果可以,
  2. 警告如何消除

使用这样的东西:

Object object=new Object();
Class c = object.getClass();
signal(object, c);

将我的评论变成答案。

我很快想到的两种方法:


这里直接使用Object.classsignal(object, Object.class); 编译正常,在我的 java 版本上没有警告。


将您的方法签名更改为:

<N, M extends N> void signal(N n, Class<? super M> n_super)

这应该让你按照你现在的方式来称呼它(如 signal(object, object.getClass());)。