s u p p o r t i n g s u p p o r t i n g c o v a r i a n t

S u p p o r t i n g S u p p o r t i n g C o v - PowerPoint PPT Presentation

S u p p o r t i n g S u p p o r t i n g C o v a r i a n t R e t u r n T y p e s C o v a r i a n t R e t u r n T y p e s & G e n e r i c s & G e n e r i c s i n i


  1. S u p p o r t i n g S u p p o r t i n g C o v a r i a n t R e t u r n T y p e s C o v a r i a n t R e t u r n T y p e s & G e n e r i c s & G e n e r i c s i n i n T y p e R e l a x e d We a v i n g T y p e R e l a x e d We a v i n g T o mo y u k i A o t a n i T o mo y u k i A o t a n i J a p a n A d v a n c e d I n s t i t u t e o f S c i e n c e a n d T e c h n o l o g y J a p a n A d v a n c e d I n s t i t u t e o f S c i e n c e a n d T e c h n o l o g y J o i n t w o r k w / J o i n t w o r k w / H i d e h i k o Ma s u h a r a & Ma n a b u T o y a ma H i d e h i k o Ma s u h a r a & Ma n a b u T o y a ma U n i v e r s i t y o f T o k y o U n i v e r s i t y o f T o k y o

  2. B a c k g r o u n d : B a c k g r o u n d : A s p e c t J , R e l a x A J a n d G e n t l e A J A s p e c t J , R e l a x A J a n d G e n t l e A J A s p e c t J + T y p e r e l a x e d w e a v i n g [ Ma s u h a r a 1 0 ] R e l a x A J [ Ma s u h a r a 1 0 ] + S u p p o r t f o r * G e n e r i c s * C o v a r i a n t r e t u r n t y p e s * proceed G e n t l e A J > mu l t i p l e r e t u r n t y p e s > a r g u me n t t y p e r e l a x a t i o n

  3. B a c k g r o u n d : B a c k g r o u n d : A s p e c t J , R e l a x A J a n d G e n t l e A J A s p e c t J , R e l a x A J a n d G e n t l e A J A s p e c t J + T y p e r e l a x e d w e a v i n g [ Ma s u h a r a 1 0 ] R e l a x A J [ Ma s u h a r a 1 0 ] + S u p p o r t f o r * G e n e r i c s * C o v a r i a n t r e t u r n t y p e s G e n t l e A J * proceed > mu l t i p l e r e t u r n t y p e s > a r g u me n t t y p e r e l a x a t i o n

  4. T y p e r e l a x e d w e a v i n g ( T R W) : T y p e r e l a x e d w e a v i n g ( T R W) : [ [ Ma Ma s s u u h h a a r r a a 1 1 0 0 ] ] D i f f e r e n c e f r o m A s p e c t J ' s w e a v i n g D i f f e r e n c e f r o m A s p e c t J ' s w e a v i n g ● S u p p o s e w e h a v e class Object{...} class BigInt extends Object{...} class Int extends Object{...} ● A s p e c t J a n d R e l a x A J ( = T R W) a c c e p t Int around():call( Object *.*(...)){...} s u p e r t y p e ● R e l a x A J a c c e p t b u t A s p e c t J r e j e c t s c o n d i t i o n a l l y Int around():call( BigInt *.*(...)){...} s i b l i n g

  5. T y p e r e l a x e d w e a v i n g T y p e r e l a x e d w e a v i n g [ [ Ma Ma s s u u h h a a r r a a 1 1 0 0 ] ] ● B y t e c o d e - l e v e l w e a v i n g ● T y p i n g p r i n c i p l e f o r w e a v i n g a d v i c e : P r i n c i p l e . T h e r e t u r n t y p e o f adv mu s t b e c o n s i s t e n t w i t h t h e o p e r a t i o n s t h a t u s e t h e r e t u r n v a l u e f r o m jp . – jp : a j o i n p o i n t – adv : a p i e c e o f a r o u n d a d v i c e a p p l i e d t o jp adv jp a p p l i e d T around(): p(){...} u s e a s T1 u s e a s T2 T mu s t b e a s u b t y p e u s e a s T3 o f T1 , T2 a n d T3 a me t h o d

  6. T y p e r e l a x e d w e a v i n g : T y p e r e l a x e d w e a v i n g : o p e r a t i o n s t h a t u s e t h e r e t u r n v a l u e o p e r a t i o n s t h a t u s e t h e r e t u r n v a l u e ● I n v o k i n g a me t h o d : o .m( a ) – R e c e i v e r : u s e t y p e i s t h e mo s t g e n e r a l t y p e t h a t d e f i n e s m – A r g u me n t : u s e t y p e i s t h e t y p e a p p e a r i n t h e s i g n a t u r e ● R e t u r n n i n g f r o m t h e me t h o d : return v ● A c c e s s i n g a f i e l d : o . f = v ● T h r o w i n g a n e x c e p t i o n : throw v ● A c c e s s i n g a n a r r a y : a [i]= v

  7. E x a m p l e o f R e l a x A J a d v i c e : E x a m p l e o f R e l a x A J a d v i c e : R e p l a c i n g B i g I n t S t r e a m w / I n t S t r e a m R e p l a c i n g B i g I n t S t r e a m w / I n t S t r e a m interface Stream{ Object get(); } class BigIntStream implements Stream{ Object get(){ /*return a BigInt*/ } } class IntStream implements Stream{ Object get(){ /*return an Int*/ } S i b l i n g o f } BigIntStream IntStream around(): C h e c k IntStream i s call(BigIntStream.new()){ c o n s i s t e n t w i t h t r u e return new IntStream(); Stream.get() } A c c e p t e d bs = new BigIntStream (); o = bs.get() ; → invokevirtual BigIntStream.get() s = o.toString(); /* bs is no longer used*/ invokeinterface Stream.get()

  8. T y p e r e l a x e d w e a v i n g T y p e r e l a x e d w e a v i n g [ [ Ma Ma s s u u h h a a r r a a 1 1 0 0 ] ] ● B y t e c o d e w e a v i n g me c h a n i s m ● T y p i n g r u l e f o r a r o u n d a d v i c e : P r i n c i p l e . T h e r e t u r n t y p e o f adv mu s t b e c o n s i s t e n t w i t h t h e o p e r a t i o n s t h a t u s e t h e r e t u r n v a l u e f r o m jp . – jp : a j o i n p o i n t – adv : a p i e c e o f a r o u n d a d v i c e a p p l i e d t o jp ● F o r ma l mo d e l : b a s e d o n F J w / u n i o n t y p e [ I g a r a s h i 0 1 ] ● S u p p o r t f o r J a v a 5 f e a t u r e s i s n o t c o n s i d e r e d – G e n e r i c s a n d c o v a r i a n t r e t u r n t y p e s

  9. G o f o r w a r d i n t o J a v a 5 : G o f o r w a r d i n t o J a v a 5 : w h a t a r e n e e d e d ? w h a t a r e n e e d e d ? ● S u p p o r t f o r c o v a r i a n t r e t u r n t y p e s – C h a n g i n g t h e r e l a x a t i o n r u l e f o r s i g n a t u r e s o f me t h o d i n v o c a t i o n s ● S u p p o r t f o r g e n e r i c s We a r e a t b y t e c o d e - l e v e l ! – I n f e r r i n g e r a s e d t y p e s

  10. E x a m p l e o f R e l a x A J a d v i c e : E x a m p l e o f R e l a x A J a d v i c e : R e p l a c i n g B i g I n t S t r e a m w / I n t S t r e a m R e p l a c i n g B i g I n t S t r e a m w / I n t S t r e a m interface Stream{ Object get(); } class BigIntStream implements Stream{ Object get(){ /*return a BigInt*/ } } class IntStream implements Stream{ Object get(){ /*return an Int*/ } } IntStream around(): C h e c k IntStream i s call(BigIntStream.new()){ c o n s i s t e n t w i t h t r u e return new IntStream(); Stream.get() } bs = new BigIntStream (); o = bs.get() ; invokevirtual BigIntStream.get() s = o.toString(); /* bs is no longer used*/ invokeinterface Stream.get()

  11. G o f o r w a r d i n t o J a v a 5 : G o f o r w a r d i n t o J a v a 5 : w h a t a r e n e e d e d ? w h a t a r e n e e d e d ? ● S u p p o r t f o r c o v a r i a n t r e t u r n t y p e s – C h a n g i n g t h e r e l a x a t i o n r u l e f o r s i g n a t u r e s o f me t h o d i n v o c a t i o n s ● S u p p o r t f o r g e n e r i c s – I n f e r r i n g e r a s e d t y p e s

Recommend


More recommend