4

为什么会这样编译?

B 在 A 中使用,没有任何泛型参数,并且在 Java 中编译。这里发生了什么?

interface B<T>
{
    public T Foo(T value);
}

public class A
{
    public B What()
    {
        return null;
    }

    public void Foo()
    {
        B x = What();
        x.Foo(123);
    }
}
4

2 回答 2

9

这是为了与 J2SE 5.0 之前的 Java 兼容。你应该得到一个 rawtypes 警告(注意编译器警告)。

于 2013-06-24T00:02:54.643 回答
7

你只是raw在这里使用一种类型B。就像

 List list = new ArrayList(); // defined as: public interface List<E>

完美,有效;虽然不推荐。

于 2013-06-24T00:03:44.843 回答