我有一个这样的基类:
class Base {
protected Object a;
Base(Object a) {
this.a = a;
}
}
然后是女儿类:
class Daugher extends Base {
/*
... some attributes ....
*/
Daughter(Pair<L, R> a) {
super(a);
/*
.... some methods ....
*/
public void mathodX() {
....
((Pair <L, R>) a).getLeft().SomeSpecificMethodOfObjectTypeL()
....
}
}
注意:Pair 特别是 org.apache.commons.lang3.tuple.Pair 对象,但我想这同样适用于其他结构,如 Map、List 等...
因此,如果我想使用强制对象类型中的特定方法,我就不得不像上面那样进行丑陋的转换。 但是,此强制转换会在 Eclipse 中引发“未经检查的强制转换”警告,因此效果不佳。 如果我尝试插入一个支票(例如“if (a instanceof Pair)”等...),我被告知我不能将 instanceof 检查用于特定分配,但我应该使用 Pair 进行检查。但这不是毫无意义的,因为我想达到特定于 L(或 R)的方法?
从更广泛的意义上提出问题,在父类(super class)中操作 protected 泛型对象的最正确方法是什么?
如果问题没有以最好的方式说明,我深表歉意,我不是 Java 专业人士。
感谢您的帮助!
最佳答案
一种方法是使用泛型:
class Base<T> {
protected T a;
Base(T a) {
this.a = a;
}
}
class Daugher<L, R> extends Base<Pair<L, R>> {
Daugher (Pair<L, R> a) {
super (a);
}
}
关于java - 在父类(super class)中强制转换 protected 对象时如何摆脱警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26061413/