Java - 泛型 - 在泛型指定对象中转换泛型对象不起作用

标签 java generics methods generic-programming generic-method

我正在尝试解决这个看似简单的通用转换问题:

首先,声明这个简单的通用对象:

public interface GenericObject<T> {}

其次,声明这个工作接口(interface):

public interface Generic { // I don't want to do Generic<T>

    <T> void setGenericObject(GenericObject<T> obj);

}

然后,让我们实现这个接口(interface):

public class GenericImpl implements Generic {

    private GenericObject<String> genericObject; // This is needed

    @Override
    public <String> void setGenericObject(GenericObject<String> obj) {
        genericObject = obj; // eclipse give me this error :
                             // Type mismatch: cannot convert from 
                             // interfaces.GenericObject<String> to
                             // interfaces.GenericObject<java.lang.String>
    }

}

如何解决这个错误?

编辑:

实际上,解决这个问题的唯一方法就是这样做:

public class GenericImpl implements Generic {

    private GenericObject<String> genericObject; 

    @SuppressWarnings("unchecked") // I don't realy like this
    @Override
    public <T> void setGenericObject(GenericObject<T> obj) {
        genericObject = (GenericObject<String>) obj;
    }

}

最佳答案

真正的问题是

public <String> void setGenericObject(GenericObject<String> obj)

其中String与您想要的java.lang.String无关。这里的String只是一个类型参数,它的名字偶然是String

请引用Is it possible to have an interface method defined with a generic return type and a concrete implementation define the return type? .

关于Java - 泛型 - 在泛型指定对象中转换泛型对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447816/

相关文章:

java - 如何在没有反射和动态代理的情况下简单地显式调用默认方法?

java - 无法将 BasicDBList 转换为数组 (java)

java - 如何在 android 中定位 passwordToggleDrawable?

java - android - 为两个列表包装器创建通用接口(interface)

具有自引用类型的泛型类型的 Java 子类化问题

c++ - 创建一个新对象并传入方法参数

javascript - jQuery: .click() 和 .on ("click"之间的区别)

Java在运行时动态添加复选框

java - jPopUpMenu 更改鼠标悬停背景

go - 在 go (1.18) 中对泛型进行多态实现的最佳方法是什么?