在类型不兼容的Java中,这个错误是什么?

在类型不兼容的Java中,这个错误是什么?,java,generics,Java,Generics,下面这个错误,我只需要一个方向,我可以阅读一些资源,一个搜索标签,封装必要的先决条件,以了解解决方案,可能会防止这样的错误 Error:(188, 65) java: incompatible types: java.lang.Class<org.base.vm.net.fizzbuzz.FizzBuzzNetwork> cannot be converted to java.lang.Class<? extends org.base.vm.net.fizzbuzz.FizzB

下面这个错误,我只需要一个方向,我可以阅读一些资源,一个搜索标签,封装必要的先决条件,以了解解决方案,可能会防止这样的错误

Error:(188, 65) java: incompatible types: java.lang.Class<org.base.vm.net.fizzbuzz.FizzBuzzNetwork> cannot be converted to java.lang.Class<? extends org.base.vm.net.fizzbuzz.FizzBuzzNetwork<PRM,?>>
错误:(18865)java:不兼容的类型:java.lang.Class无法转换为java.lang.Class>
错误的对应行

public class FizzBuzzNetworkProvider<PRM extends Serializable>
    extends NetworkProvider<PRM> {
          public FizzBuzzNetworkProvider(
          final IVMParameters<PRM> parameters,
          final boolean foo, final int boo
     {
        this(
            ((Class<? extends FizzBuzzNetwork<PRM, ?>>) (FizzBuzzNetwork.class)),
            parameters, foo, boo);
     }
}
公共类FizzBuzzNetworkProvider
扩展网络提供者{
公共网络提供商(
最终IVM参数参数,
最终布尔值foo,最终整数boo
{
这个(
((Class>)(FizzBuzzNetwork.Class)),
参数,foo,boo);
}
}

这只是
Foo
不是
Foo
的子类型的一个例子。请参阅:

问题在于以下人员的签名:

C.class的类型是class,其中C是类、接口或数组类型的名称(§4.3)

因此
FizzBuzzNetwork.class
class
,它不是
类的超类,与
列表的方式不同。因此
类>
完全相同,这可能会导致混淆错误

例如,如果使用其
instanceof
方法进行检查,它无法检查某个对象是否是
FizzBuzzNetwork
的实例,而不是说,
FizzBuzzNetwork
——该信息会从运行时中删除。检查将成功(它们都是FizzBuzzNetwork对象,这是检查可以查找的全部),但尝试使用它与PRM一起工作可能会导致ClassCastException


如果您希望安全,您应该只需要Java提供的
,您只能在编译时获取其FizzBuzzNetwork。这是一件好事,因为运行时也能提供这一切。您必须找到一些其他机制来确定您正在使用的对象是否是
FizzBuzzNetwork

这主要是
Foo
不是子对象的一个示例
Foo的类型。请参阅:

问题在于以下人员的签名:

C.class的类型是class,其中C是类、接口或数组类型的名称(§4.3)

因此
FizzBuzzNetwork.class
class
,它不是
类的超类,与
列表的方式不同。因此
类>
完全相同,这可能会导致混淆错误

例如,如果使用其
instanceof
方法进行检查,它无法检查某个对象是否是
FizzBuzzNetwork
的实例,而不是说,
FizzBuzzNetwork
——该信息会从运行时中删除。检查将成功(它们都是FizzBuzzNetwork对象,这是检查可以查找的全部),但尝试使用它与PRM一起工作可能会导致ClassCastException


如果您希望安全,您应该只需要Java提供的
,您只能在编译时获取其FizzBuzzNetwork。这是一件好事,因为运行时也能提供这一切。您必须找到一些其他机制来确定您正在使用的对象是否为
FizzBuzzNetwork

,这意味着它无法从FizzBuzzNetwork转换为FizzBuzzNetwork请共享更多FizzBuzzNetworkProvider类这意味着它无法从FizzBuzzNetwork强制转换到FizzBuzzNetwork请共享更多FizzBuzzNetworkProvider类
(Class<? extends FizzBuzzNetwork<PRM, ?>>) (Class) FizzBuzzNetwork.class