bounded type parameters
play

Bounded Type Parameters 49 What is a bounded Type Parameter? - PowerPoint PPT Presentation

Bounded Type Parameters 49 What is a bounded Type Parameter? Restrict the types that may be used as type arguments for a parameterized type E.g. a generic methods will work only with Integer-like types 50 Using bounded types with


  1. Bounded Type Parameters … 49

  2. What is a bounded Type Parameter? • Restrict the types that may be used as type arguments for a parameterized type • E.g. a generic methods will work only with Integer-like types 50

  3. Using bounded types with Generic Methods Please Note This means “subtype” not inheritance public class Box<T> { private T t; public void set(T t) {this.t = t;} public T get() {return t;} public <U extends Number> void inspect(U u){ System.out.println("T: " + t.getClass().getName()); System.out.println("U: " + u.getClass().getName()); } } 51

  4. Let’s check that Java does its job public static void main(String[] args) { Box<Integer> integerBox = new Box<Integer>(); integerBox.set(new Integer(10)); � integerBox.inspect("some text"); // error: this actual parameter is a String! } Box.java:21: <U>inspect(U) in Box<java.lang.Integer> cannot be applied to (java.lang.String) integerBox.inspect("10"); ^ 1 error 52

  5. Extra Free Feature! Bounded Types Parameters also allow to invoke methods defined in the bounds public class NaturalNumber<T extends Integer> { private T n; isEven(…) able to call public NaturalNumber(T n) { this.n = n; } intValue(…) Since n is of data type T public boolean isEven() { return n.intValue() % 2 == 0; } n is of data type T means… // ... • T happens to extend Integer } • thus T features intValue() method 53

  6. New Requirement! What about introducing Multiple Bounds? Note: Definition This will be referred to as the leftmost bounded type <T extends B1 & B2 & B3> A type variable with multiple bounds is a If one of the bounds is a subtype of all the class, it must be specified types listed in the first bound 54

  7. Example featuring a class For example: class A { /* ... */ } interface B { /* ... */ } interface C { /* ... */ } class D <T extends A & B & C> { /* ... */ } If bound A is not specified first, you get a compile-time error: class D <T extends B & A & C> { /* ... */ } 55

  8. Debug this Example public static <T> int countGreaterThan(T[] anArray, T elem) { // Return the # of elements greater than elem ? What do you think is int count = 0; the problem here? for (T e : anArray) if (e > elem) // compiler error ++count; ! The > operator works only w/ return count; primitive data types… } … not objects 56

  9. Debug this Example public static <T> int countGreaterThan(T[] anArray, T elem) { // Return the # of elements greater than elem ? How do we fix this int count = 0; problem? for (T e : anArray) if (e > elem) // compiler error ++count; ! T must extend the return count; Comparable <T> interface } 57

  10. Now we may rewrite our original attempt, using this new Comparable<T> interface NOTE public interface Comparable<T> { We use “extends” public int compareTo(T o); not “implements” } public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem){ Remember… int count = 0; for (T e : anArray) This is about subtyping if (e.compareTo(elem) > 0) not inheritance or ++count; interface return count; implementations } 58

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend