- 主题:问一个泛型时候,子类想调用父类的方法的问题
是不是只能用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.*
DataMessage 不就是哥接口吗?element.getData()调用的是实现类的方法,调用父类方法什么意思?
--
FROM 36.110.168.*
你都覆盖了, 还要调人家, 咋调
如果这个方法作为基础方法可能会被实现类和子类引用, 在接口中就换个名称声明为default, 这样所有实现类都能调.
【 在 YOUTH 的大作中提到: 】
: 是不是只能用Wrapper包装一下,不该用继承?
: public interface DataMessage {
: Map<String, String> getData();
: ...................
--
FROM 220.181.41.*
调用父类方法:super.serialize
这里报错
【 在 sqzs 的大作中提到: 】
: DataMessage 不就是哥接口吗?element.getData()调用的是实现类的方法,调用父类方法什么意思?
--
FROM 61.50.105.*
可以改父类吗?
【 在 YOUTH 的大作中提到: 】
: 是不是只能用Wrapper包装一下,不该用继承?
: public interface DataMessage {
: Map<String, String> getData();
: ...................
--
FROM 14.145.191.*
父类是lib里面的,我想扩充一下。
这个问题在于:
如果Java不支持泛型,serialize这个方法的传入参数应该是Object(因为万物皆可序列化的)。
我这不会有问题,直接super.serialize() 不会报错。
引入了泛型,结果我没法这么写了。
【 在 Mikov 的大作中提到: 】
: 你都覆盖了, 还要调人家, 咋调
: 如果这个方法作为基础方法可能会被实现类和子类引用, 在接口中就换个名称声明为default, 这样所有实现类都能调.
:
--
FROM 61.50.105.*
改不了 父类是一个第三方的lib库。
不过改父类也没法改吧
【 在 canper 的大作中提到: 】
: 可以改父类吗?
--
FROM 61.50.105.*
JsonSerializationSchema<DataMessage>这里你已经指定泛型是DataMessage
所以super.serialize(这里必须是DataMessage对象)
--
FROM 36.110.168.*
然后你super.serialize(element.getData()) ,这里肯定报错阿,改成super.serialize(element)肯定就不报错了
--
FROM 36.110.168.*
这样编译没问题了
执行会有问题吗?
【 在 sqzs 的大作中提到: 】
: 然后你super.serialize(element.getData()) ,这里肯定报错阿,改成super.serialize(element)肯定就不报错了
: --
发自「今日水木 on iOS」
--
FROM 117.133.82.*