Java 铸造到超级级a型“;“类”;

Java 铸造到超级级a型“;“类”;,java,inheritance,encapsulation,Java,Inheritance,Encapsulation,我有一个接口 interface Inter extends Blah { public void someMethod(); } class Dummy { Class<Blah> interfaceType; public setInterfaceType( Class<Blah> input ) { this.interfaceType = input; } } class tester { public void init(

我有一个接口

interface Inter extends Blah {
   public void someMethod();
}

class Dummy {
  Class<Blah> interfaceType;

  public setInterfaceType( Class<Blah> input ) {
    this.interfaceType = input;
  }  
}

class tester {
  public void init() {
    Dummy dummyObj = new DummyObj();
    dummyObj.setInterfaceType( Inter.class );     //This complains that the type is not suitable
  }
}
接口内部扩展布拉赫{
公共方法();
}
类虚拟{
类接口类型;
公共setInterfaceType(类输入){
this.interfaceType=输入;
}  
}
类测试员{
公共void init(){
虚拟dummyObj=新dummyObj();
setInterfaceType(Inter.class);//这表示类型不合适
}
}
编译错误:

类型虚拟中的方法setInterfaceType(类)不适用于参数(类)

在调用setter时,我尝试将
input
转换为
Class
,但这也是不允许的。我不明白为什么它不接受子类类型的类。有人能告诉我这里发生了什么,以及如何调用setter吗。
Dummy
类是外部的,因此我无法更改它。

因此您不能设置为
class
类型的
对象。想想看。如果您能够使用
List List=new ArrayList()
,那么通过
List
您不仅可以添加苹果,还可以添加其他水果。可以吗

要解决此问题,请尝试将
Class
更改为
Class,这样您就不能将
Class
类型的对象设置为
Class
。想想看。如果您能够使用
List List=new ArrayList()
,那么通过
List
您不仅可以添加苹果,还可以添加其他水果。可以吗

要解决此问题,请尝试将
Class
更改为
Class,这样您就不能将
Class
类型的对象设置为
Class
。想想看。如果您能够使用
List List=new ArrayList()
,那么通过
List
您不仅可以添加苹果,还可以添加其他水果。可以吗

要解决此问题,请尝试将
Class
更改为
Class,这样您就不能将
Class
类型的对象设置为
Class
。想想看。如果您能够使用
List List=new ArrayList()
,那么通过
List
您不仅可以添加苹果,还可以添加其他水果。可以吗


要解决此问题,请尝试将
Class
更改为
Class您最肯定的意思

Class<? extends Blah> interfaceType;

public setInterfaceType( Class<? extends Blah> input ) {
    this.interfaceType = input;
}  

Class你最肯定的意思是

Class<? extends Blah> interfaceType;

public setInterfaceType( Class<? extends Blah> input ) {
    this.interfaceType = input;
}  

Class你最肯定的意思是

Class<? extends Blah> interfaceType;

public setInterfaceType( Class<? extends Blah> input ) {
    this.interfaceType = input;
}  

Class你最肯定的意思是

Class<? extends Blah> interfaceType;

public setInterfaceType( Class<? extends Blah> input ) {
    this.interfaceType = input;
}  

类泛型继承的行为不同。您需要使用通配符来实现所需的功能。泛型继承的行为不同。您需要使用通配符来实现所需的功能。泛型继承的行为不同。您需要使用通配符来实现所需的功能。泛型继承的行为不同。你需要使用通配符来实现你想要的。很好,它成功了。我必须创建一个class类型的变量虚拟类是一个外部库,所以无法更改它,但是你的提示起了作用。很好,它起了作用。我必须创建一个class类型的变量虚拟类是一个外部库,所以无法更改它,但是你的提示起了作用。很好,它起了作用。我必须创建一个class类型的变量虚拟类是一个外部库,所以无法更改它,但是你的提示起了作用。很好,它起了作用。我必须创建一个CLASSE类型的变量——伪类是一个外部库,因此无法更改它,但您的提示起了作用。这并不完全正确(这是可疑的)。代理具有作为其代理的接口的属性并不少见,例如:org.mybatis.spring.mapper.MapperFactoryBean在MapperFactoryBean中,T可能是任何类,因此setMapperInterface确实有意义:MapperFactoryBean类绝对没有办法了解它正在使用的类。不过,在OP中,Dummy.setInterfaceType()希望获得对象Blah.class,而不是其他。也就是说,不是实现(或扩展)它的任何类(或其他接口)的类对象。代理类是一个独特的类,它实现作为参数给出的接口。因此Dummy能够自己获得Blah.class对象,而不需要任何setter。这并不完全正确(这是可疑的)。代理具有作为其代理的接口的属性并不少见,例如:org.mybatis.spring.mapper.MapperFactoryBean在MapperFactoryBean中,T可能是任何类,因此setMapperInterface确实有意义:MapperFactoryBean类绝对没有办法了解它正在使用的类。不过,在OP中,Dummy.setInterfaceType()希望获得对象Blah.class,而不是其他。也就是说,不是实现(或扩展)它的任何类(或其他接口)的类对象。代理类是一个独特的类,它实现作为参数给出的接口。因此Dummy能够自己获得Blah.class对象,而不需要任何setter。这并不完全正确(这是可疑的)。代理具有作为其代理的接口的属性并不少见,例如:org.mybatis.spring.mapper.MapperFactoryBean在MapperFactoryBean中,T可能是任何类,因此setMapperInterface确实有意义:MapperFactoryBean类绝对没有办法了解它正在使用的类。不过,在OP中,Dummy.setInterfaceType()希望获得对象Blah.class,而不是其他。也就是说,不是实现(或扩展)它的任何类(或其他接口)的类对象。代理类是一个独特的类,它实现作为参数给出的接口。因此Dummy能够自己获得Blah.class对象,而不需要任何setter。这并不完全正确(这是可疑的)。代理具有作为其代理的接口的属性并不少见,例如:org.mybatis.spring.mapper.MapperFactoryBean在MapperFactoryBean中,T可以是任何类,因此setMapperInterface是有意义的:MapperFactoryBean类绝对没有办法