這是我的結構。
public class FooInfo { ... }
public class FooAInfo extends FooInfo { ... }
public class FooBInfo extends FooInfo { ... }
public interface IFoo<T1 extends FooInfo> {
void proc(T1 fooInfo);
}
public class FooA implements IFoo<FooAInfo> {
void proc(FooAInfo fooInfo) { ... }
}
public class FooB implements IFoo<FooBInfo> {
void proc(FooBInfo fooInfo) { ... }
}
我想像使用它們一樣
public abstract class FooUser {
protected IFoo<FooInfo> foo;
}
public class FooAUser extends FooUser {
public FooAUser() {
super.foo = new FooA();
}
}
public class FooBUser extends FooUser {
public FooBUser() {
super.foo = new FooB();
}
}
我想在子類中初始化' sFooUser變數foo。FooAUserFooBUser
但它不起作用,因為new FooA()并且new FooB()沒有<FooInfo>.
我應該怎么辦?
uj5u.com熱心網友回復:
你只需要FooUser通用:
public abstract class FooUser<T extends FooInfo> {
protected IFoo<T> foo;
}
public class FooAUser extends FooUser<FooAInfo> {
public FooAUser() {
super.foo = new FooA();
}
}
public class FooBUser extends FooUser<FooBInfo> {
public FooBUser() {
super.foo = new FooB();
}
}
或者,您可以在引數上使用通用通配符( ?) foo:
public abstract class FooUser {
protected IFoo<?> foo;
}
public class FooAUser extends FooUser {
public FooAUser() {
super.foo = new FooA();
}
}
public class FooBUser extends FooUser {
public FooBUser() {
super.foo = new FooB();
}
}
(與問題無關,但您proc()的類中的方法也需要宣告public。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/525401.html
標籤:爪哇仿制药界面
上一篇:Java位解碼函式
