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类绝对没有办法