В общем, легче посмотреть на сорс этого метода
| Код | public java.lang.Object narrow ( java.lang.Object narrowFrom, java.lang.Class narrowTo) throws ClassCastException { java.lang.Object result = null;
if (narrowFrom == null) return null;
if (narrowTo == null) throw new NullPointerException("invalid argument");
try { if (narrowTo.isAssignableFrom(narrowFrom.getClass())) return narrowFrom;
// Is narrowTo an interface that might be // implemented by a servant running on iiop? if (narrowTo.isInterface() && narrowTo != java.io.Serializable.class && narrowTo != java.io.Externalizable.class) { org.omg.CORBA.Object narrowObj = (org.omg.CORBA.Object) narrowFrom; // Create an id from the narrowTo type... String id = RepositoryId.createForAnyType(narrowTo); if (narrowObj._is_a(id)) { return Utility.loadStub(narrowObj,narrowTo); } else { throw new ClassCastException( "Object is not of remote type " + narrowTo.getName() ) ; } } else { throw new ClassCastException( "Class " + narrowTo.getName() + " is not a valid remote interface" ) ; } } catch(Exception error) { ClassCastException cce = new ClassCastException() ; cce.initCause( error ) ; throw cce ; } }
|
Он проверяет, является ли первый аргумент инстансом класса или сабкласса второго аргумента:
| Код | if (narrowTo.isAssignableFrom(narrowFrom.getClass())) return narrowFrom;
|
Если нет, то смотрит, если это CORBA объект, то пытается вернуть стаб к нему, если нет, то бросает иксепшн. |