Java 带有类&;一个界面-在一起

Java 带有类&;一个界面-在一起,java,class,generics,bounded-wildcard,Java,Class,Generics,Bounded Wildcard,我希望有一个类对象,但我想强制它所表示的任何类扩展类a并实现接口B 我可以做到: Class<? extends ClassA> Class实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样: <T extends ClassA & InterfaceB> 为什么这么复杂?正如Java泛型FAQ中所说的: 看起来这对变量声明不起作用,但在类上放置泛型边界时确实起作用。因此,要想做你想做的事,你可能需要跳过几个圈。但你可以做

我希望有一个类对象,但我想强制它所表示的任何类扩展类a并实现接口B

我可以做到:

Class<? extends ClassA>
Class实际上,你可以做你想做的事。如果要提供多个接口或一个类加接口,则必须使通配符看起来像这样:

<T extends ClassA & InterfaceB>
为什么这么复杂?正如Java泛型FAQ中所说的:

看起来这对变量声明不起作用,但在类上放置泛型边界时确实起作用。因此,要想做你想做的事,你可能需要跳过几个圈。但你可以做到。您可以这样做,在类上设置通用边界,然后:

class classB { }
interface interfaceC { }

public class MyClass<T extends classB & interfaceC> {
    Class<T> variable;
}
类B{}
接口接口{}
公共类MyClass{
类变量;
}
获取具有所需限制的
变量
。有关更多信息和示例,请参阅第3页,共页。注意,在
中,类名必须在前面,接口在后面。当然,您只能列出一个类。

您不能使用“匿名”类型参数(即使用
的通配符),但可以使用“命名”类型参数。只需在方法或类级别声明类型参数

import java.util.List;
interface A{}
interface B{}
public class Test<E extends B & A, T extends List<E>> {
    T t;
}
import java.util.List;
接口A{}
接口B{}
公开课考试{
T;
}

以下是您在Kotlin中的操作方法

fun <T> myMethod(item: T) where T : ClassA, T : InterfaceB {
    //your code here
}
fun-myMethod(项目:T),其中T:ClassA,T:InterfaceB{
//你的代码在这里
}

这很有帮助。值得一提的是,类必须放在第一位,你不能说“”。对于T,你如何做同样的事情?T应该扩展一个类或实现一个接口?@RagunaHjawahar:你不能对此太过开放。您必须有一些边界,其中之一是提前知道在哪里有接口,在哪里有类,以及如何使用继承。对于类型参数,您必须知道它是类还是接口。答案的第一行是“让您的通配符看起来像这样”。该表达式中没有
,那么它真的是“通配符”吗?我问这个问题是因为当类型参数真的是一个通配符时,我不能让整个“同时扩展两件事”的概念起作用。是的,它不是一个真正的通配符,你不能用通配符做OP要求的事情。你可以有效地做OP想要做的事情,只是不能使用通配符。为什么不允许使用通配符?i、 我不明白为什么这不应该是有效的:ArrayLister用变量放置通配符是一项伟大的技术!但它并不总是有效的。例如,Java不允许在注释值类型中使用名称类型变量,但它允许使用通配符。如果你投反对票,请你添加一个解释好吗?我投了赞成票,但如果不是反对票,我可能会投反对票。尽管大肆宣传,但我还没有准备好放弃Java,转而使用Kotlin。甚至Scala也不行,我更喜欢Kotlin。
import java.util.List;
interface A{}
interface B{}
public class Test<E extends B & A, T extends List<E>> {
    T t;
}
fun <T> myMethod(item: T) where T : ClassA, T : InterfaceB {
    //your code here
}