请考虑以下代码。为什么我必须在withCastTest中而不是在withoutCastTest中转换为String?
当type参数用作另一个泛型类中的类型参数时,似乎java无法推断泛型类。在withoutCastTest中,我将type参数作为普通参数发送,它可以推断出正确的类型。这是为什么?不管怎么说呢?
如果问题形成怪异,我不确定命名约定。
public class RandomHelper {
public interface RandomInterface<E> {
public abstract E get();
}
public static abstract class Randomable<E> implements RandomInterface {
protected E object;
public Randomable(E object) {
this.object = object;
}
}
public static <E> E withCastTest(RandomInterface<E> action) {
E savedObject = action.get();
return savedObject;
}
public static <E> E withoutCastTest(RandomInterface<E> action, E e) {
E savedObject = action.get();
return savedObject;
}
}
public class TestJava {
public void run() {
String s ="test";
String ret = (String) RandomHelper.withCastTest(new Randomable<String>(s) {
@Override
public String get() {
return object;
}
});
String ret2 = RandomHelper.withoutCastTest(new Randomable<String>(s) {
@Override
public String get() {
return object;
}
}, "test2");
System.out.println(ret);
System.out.println(ret2);
}
public static void main(String[] args) {
TestJava test = new TestJava();
test.run();
}
}
编辑:代码中的错误
答案 0 :(得分:1)
您只需在{/ 1>}
之后添加参数<E>
即可
implements RandomInterface
然后你需要改变:(注意public abstract class Randomable<E> implements RandomInterface<E> {
方法的返回类型)
get
答案 1 :(得分:1)
您的抽象类没有实现通用接口
Randomable<E> implements RandomInterface<E>
缺失。
此外,您的实现不能返回Object,但必须返回String作为类型