为什么用Java编译?

Rea*_*lar 4 java generics

为什么编译?

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 9

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

  • 它的工作原理是因为泛型是编译器的小说. (2认同)

Rav*_*yal 7

你只是rawB这里使用一种类型.就像

 List list = new ArrayList(); // defined as: public interface List<E>
Run Code Online (Sandbox Code Playgroud)

完美,有效; 不推荐.

  • @nachokk它不一样,编译器处理原始类型的表达式有点不同.(虽然它可能足够接近.) (2认同)