首页 > 解决方案 > 接口方法中的泛型被剥离

问题描述

我有这个界面:

public interface Persistant<T extends BaseDaoEnabled<T, UUID>> extends Identifiable {

T getSelf();

default <P> P getInstance(DataKey<P> key) {
    return key.getDefaultInstance();
}

和一个实现它的类。我的问题是,当我调用obj.getInstance(DataKeys.X)X 作为DataKey<X>对象时,此方法的返回类型是Object而不是X,泛型类型被剥离。当我将方法放在我的对象类(不是接口)中时,它工作得很好。请参阅下面的屏幕截图

第一个方法来自接口,第二个方法来自类。他们都有相同的签名

在此处输入图像描述

标签: javagenerics

解决方案


该接口有一个类型参数 ( Persistant<T...>),我忘记将其包含在我的Resident/obj类中。我只是通过使用来implements Persistant实现它,使用implements Persistant<Resident>修复了我的问题来实现它!


推荐阅读