File: node156.html

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (160 lines) | stat: -rw-r--r-- 6,279 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Interfaces and Abstract Classes</TITLE>
<META NAME="description" CONTENT="Interfaces and Abstract Classes">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="users_guide.css">

<LINK REL="next" HREF="node157.html">
<LINK REL="previous" HREF="node155.html">
<LINK REL="up" HREF="node148.html">
<LINK REL="next" HREF="node157.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html3039"
  HREF="node157.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3033"
  HREF="node148.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3027"
  HREF="node155.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3035"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3037"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3040"
  HREF="node157.html">Exceptions</A>
<B> Up:</B> <A NAME="tex2html3034"
  HREF="node148.html">Java Bindings</A>
<B> Previous:</B> <A NAME="tex2html3028"
  HREF="node155.html">Using SIDL arrays with</A>
 &nbsp; <B>  <A NAME="tex2html3036"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3038"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H1><A NAME="SECTION03580000000000000000"></A>
<A NAME="9145"></A>
<BR>
Interfaces and Abstract Classes
</H1>

<P>
Babel implements SIDL interfaces as Java interfaces in Java.
This is a close mapping in general, but it does have the problem that
Java interfaces can't hold data.  Since we need the correct IOR
pointer in order to place that interface in an array or throw it as an
Exception, the lack of data becomes a problem.  For this reason, we
have created Wrapper classes for interfaces and abstract classes.

<P>
All interfaces and abstract classes have static inner class named
<TT>Wrapper</TT>.  This <TT>Wrapper</TT> class holds the interface IOR
pointer, and also inherits from <TT>gov.llnl.babel.BaseClass</TT> and implements the 
outer interface.  Therefore, you can call all the interface methods on
the wrapper object, as well as <TT>gov.llnl.babel.BaseClass</TT> methods such as
<TT>_cast2</TT>, and <TT>isType</TT>.

<P>
This wrapper class is what is returned when an interface is gotten out
of an array, a method takes or returns an interface, or when an exception implemented as an interface is
caught. 
(There's actually a difference here.  While what is gotten
out of the Array or returned from a method is a Wrapper object, the programmer doesn't usually need to worry about that, as is shown in the example below.  In the case of
exceptions, you actually do have to catch the Wrapper. Exceptions are
covered in more detail in Subsection&nbsp;<A HREF="node157.html#ss:Exc">10.9</A>) Because wrapper
classes inherit only from an interface, they
can be java casted to their enclosing interface, or it's
super-interfaces, but must be Babel casted to any classes.  In this
example, Subclass implements Super-Interface:

<P>
<BR>
<PRE  CLASS="verbatim">SuperInterface.Array1 arry = new SuperInterface.Array1(5, true);
SubClass obj = new SubClass();
arry.set(0, (SuperInterface)obj);
obj = null;
SuperInterface temp = arry.get(0);
obj = (SubClass) temp;   //INCORRECT Will throw ClassCastException

obj = (SubClass) SubClass._cast((SuperInterface.Wrapper)temp); //CORRECT
</PRE></td></tr></table></blockquote>
<P>
Sometimes you can get away with not Java casting the interface to the
Wrapper class before Babel casting it, but not in general.  (Usually
you don't have to when the interface was gotten out of an array) 

<P>
Here's an example of casting an interface on the server side:

<P>
<BR>
<PRE  CLASS="verbatim">
public objarg.SubClass toClass_Impl (/*in*/ objarg.Iface ifcy ) {
  // DO-NOT-DELETE splicer.begin(objarg.SubClass.toClass)
  objarg.SubClass ret =  (objarg.SubClass) 
    ((objarg.Iface.Wrapper)ifcy)._cast2("objarg.SubClass");
  return ret;
  // DO-NOT-DELETE splicer.end(objarg.SubClass.toClass)
}
</PRE></td></tr></table></blockquote>
<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html3039"
  HREF="node157.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html3033"
  HREF="node148.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html3027"
  HREF="node155.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html3035"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html3037"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html3040"
  HREF="node157.html">Exceptions</A>
<B> Up:</B> <A NAME="tex2html3034"
  HREF="node148.html">Java Bindings</A>
<B> Previous:</B> <A NAME="tex2html3028"
  HREF="node155.html">Using SIDL arrays with</A>
 &nbsp; <B>  <A NAME="tex2html3036"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html3038"
  HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>