如果参数化方法不是输入参数,它如何解析<T>?

swi*_*Man 12 java generics parameterized-types

在下面的代码中,编译器如何处理对"T"的引用,因为该方法不采用允许推断T的参数?是否可以将任何类型的对象放入列表中进行限制?是否在我将String添加到列表的行中进行了转换?我的第一个想法是没有任何东西来推断T,T成为一个对象类型.提前致谢.

public class App {

private <T> void parameterizedMethod()
{
    List<T> list = new ArrayList<>();
    for(int i = 0; i < 10; i++)
    {
        list.add((T)new String()); //is a cast actually occurring here?
    }
}

public App()
{
    parameterizedMethod();
}

public static void main(String[] args) {
    new App();
}
}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 0

List<T> list = new ArrayList<>();
for(int i = 0; i < 10; i++)
{
    list.add((T)new String()); //is a cast actually occurring here?
}
Run Code Online (Sandbox Code Playgroud)

不,那里实际上没有演员阵容。如果您对它做了任何list强制它成为 a 的操作List<T>(例如返回它),那么可能会导致ClassCastException编译器在插入实际强制转换的位置出现 s 。