java - 采用对象及其任何父类(super class)的方法

标签 java generics casting superclass

实现。

一个方法signal应该采取

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

打电话应该没问题

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

Object object 的父类(super class)型。但调用它会产生警告。用 IDE 的话来说:

IntelliJ(Android Studio)

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

eclipse

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

问题。

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

最佳答案

将我的评论转化为答案。

我很快就能想到的两种方法:

<小时/>

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

<小时/>

将方法签名更改为:

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

这应该让您可以按照现有的方式调用它(如signal(object, object.getClass());)。

关于java - 采用对象及其任何父类(super class)的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418798/

相关文章:

java - Rally Java 回顾 API

java - 在java中使用类型参数进行转换

c# - T 是 type1 或 type2 的通用方法

c++ - 将 void* 转换为 struct*

php 类型转换和数组引用

php - 如何从 Laravel 中没有标签 "stdClass Object"的查询中获取结果?

java - 这不会直接突破 if 语句吗?

c# - .Net 的 Java AST 解析器

java - getSource() 和 getActionCommand()

java - 如何概括一种在 Java 中对 Map 条目进行排序的方法?