- 主题:问一个泛型时候,子类想调用父类的方法的问题
是不是只能用Wrapper包装一下,不该用继承?
public interface DataMessage {
Map<String, String> getData();
}
public class JsonSerializationSchema<T> implements SerializationSchema<T> {
@Override
public byte[] serialize(T element) {
try {
return mapper.writeValueAsBytes(element);
} catch (JsonProcessingException e) {
throw new RuntimeException(
String.format("Could not serialize value '%s'.", element), e);
}
}
}
public class DataMessageJsonSerializationSchema extends JsonSerializationSchema<DataMessage> {
@Override
public byte[] serialize(DataMessage element) {
return super.serialize(element.getData()) ///?? 这里想使用父类的方法,应该怎么写呢?
}
}
--
FROM 123.123.40.*
调用父类方法:super.serialize
这里报错
【 在 sqzs 的大作中提到: 】
: DataMessage 不就是哥接口吗?element.getData()调用的是实现类的方法,调用父类方法什么意思?
--
FROM 61.50.105.*
父类是lib里面的,我想扩充一下。
这个问题在于:
如果Java不支持泛型,serialize这个方法的传入参数应该是Object(因为万物皆可序列化的)。
我这不会有问题,直接super.serialize() 不会报错。
引入了泛型,结果我没法这么写了。
【 在 Mikov 的大作中提到: 】
: 你都覆盖了, 还要调人家, 咋调
: 如果这个方法作为基础方法可能会被实现类和子类引用, 在接口中就换个名称声明为default, 这样所有实现类都能调.
:
--
FROM 61.50.105.*
改不了 父类是一个第三方的lib库。
不过改父类也没法改吧
【 在 canper 的大作中提到: 】
: 可以改父类吗?
--
FROM 61.50.105.*
如果调用super.serialize(element),我还搞个子类干啥,
我的目的就是只序列化其中的一个属性
我前面也解释了:
这个问题在于:
如果Java不支持泛型,serialize这个方法的传入参数应该是Object(因为万物皆可序列化的)。
我这不会有问题,直接super.serialize() 不会报错。
引入了泛型,结果我没法这么写了。
【 在 sqzs 的大作中提到: 】
: 然后你super.serialize(element.getData()) ,这里肯定报错阿,改成super.serialize(element)肯定就不报错了
--
FROM 174.137.51.*