方法参数extends class implements interface [英] Method argument extends class implements interface

查看:231
本文介绍了方法参数extends class implements interface的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下类和接口:

public class BasicObject{...}
public interface CodeObject{...}

我想创建一个方法,其中参数必须是BasicObject类型并实现CodeObject。我尝试了以下代码,但它不保证clazz是一个实现CodeObject的类。

I want to create a method in which the argument needs to be of type BasicObject and implements CodeObject. I tried the following code but it doesn't guarantee clazz to be a class that implements CodeObject.

myMethod(Class<? extends BasicObject> clazz){...}

我想做这样的事情,但它没有编译:

I want to do something like this but it doesn't compile:

myMethod(Class<? extends BasicObject implements CodeObject> clazz){...}


推荐答案

您的模式类必须扩展 BasicObject 并扩展/实现 CodeObject (实际上是一个接口)。您可以使用方法签名的通配符定义中声明的多个类来执行此操作,如下所示:

Your pattern class has to extend BasicObject and extend/implement CodeObject (which is actually an interface). You can do it with multiple classes declared in the wildcard definition of the method signature, like this:

public <T extends BasicObject & CodeObject> void myMethod(Class<T> clazz)

请注意,如果你这样做,它将无效这些方式:

Note that it won't work if you do it any of these ways:


  • public< T extends BasicObject,CodeObject> void myMethod(Class< T> clazz)

这是技术上有效的语法,但 CodeObject 未使用;该方法将接受任何扩展 BasicObject 的类,无论它们是否扩展/实现 CodeObject

This is technically valid syntax, but CodeObject is unused; the method will accept any classes that extends BasicObject, no matter whether they extend/implement CodeObject.

public void myMethod(Class<?extends BasicObject& CodeObject> clazz)

public void myMethod(Class<?extends BasicObject,CodeObject> clazz)

根据Java,这些只是错误的语法。

These are just wrong syntax according to Java.

这篇关于方法参数extends class implements interface的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆