Java:为什么泛型类不强制使用相同的类型?

Java:为什么泛型类不强制使用相同的类型?,java,generics,Java,Generics,我有: 公开期末班{ .... } 如果我这样做: public final class SomeClass<L, R>{ .... } 公开期末班{ .... 公共方法(对象obj) { SomeClass other=(SomeClass)obj; .... } .... SomeClass firstObject=新的SomeClass(); SomeClass secondObjec=新的SomeClass(); firstObject.so

我有:


公开期末班{
....
}
如果我这样做:


    public final class SomeClass<L, R>{
    ....
    }

公开期末班{
....
公共方法(对象obj)
{
SomeClass other=(SomeClass)obj;
....
}
....
SomeClass firstObject=新的SomeClass();
SomeClass secondObjec=新的SomeClass();
firstObject.someMethod(第二个对象);
...
即使
L
R
类型与
firstObject
secondObject
不同,它也不会引发强制转换异常。
为什么?

此代码将编译,因为您将对象作为参数传递,并将其显式转换为
SomeClass
。因此,只要您传递
SomeClass
的任何实例,这将在运行时起作用,因为届时所有泛型类型都将消失。我猜您将从对象在编译期间向某个类发出警告(除非指定了
@SuppressWarnings(“未选中”)

为了避免这种情况,您必须指定允许作为参数传递的对象的类型,例如:


    public final class SomeClass<L, R>{
    ....

    public someMethod(Object obj)
    {
    SomeClass other<L, R> = (SomeClass<L, R>) obj;
    ....
    }
    ....
    SomeClass<String, String> firstObject = new SomeClass<String, String>();
    SomeClass<Integer, Integer> secondObjec = new SomeClass<Integer, Integer>();
    firstObject.someMethod(secondObject );
    ...
公共someMethod(SomeClass obj)

编译器会检查Java中的泛型。在运行时不会考虑它。

我在这里没有看到泛型类…没有转义大小:)请再次查看
public someMethod(SomeClass<L, R> obj)