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)