generics - Java instance for comparable -


why legal create new box(); , new box<integer>();? because box comparable?

public class box<comparable> {   private boolean compareto(box b) {     return (this.y > b.y);   }    double x=0;   double y=0;    public static void main (string[] args) {     box = new box();     box b = new box<integer>();     system.out.println(a.compareto(b));   } } 

you have declared class generic type parameter. not same implementing comparable interface:

public class box<comparable> {  } 

is same as:

public class box<t> {  } 

which not same as:

public class box<t> implements comparable<t> {      @override     public int compareto(final t o) {         return 0;     } } 

because type parameter unbounded, accept type. can use integer or string:

public class box<t> {      public static void main(string[] args) {         box = new box();         box b = new box<>();         box c = new box<integer>();         box d = new box<string>();     } } 

the reason why can create new box without specifying type because of backwards compatibility. new box have raw type box<t>. bad practice , should avoided.

you can read more raw types here

if wanted enforce type parameter implements comparable, can do:

import java.awt.*;  public class box<t extends comparable<t>> {      public static void main(string[] args) {         box = new box();         box b = new box<>();         box c = new box<integer>();         box d = new box<string>();          // 1 not work rectangle not implement comparable!         box e = new box<rectangle>();      } } 

Comments

Popular posts from this blog

sql - invalid in the select list because it is not contained in either an aggregate function -

Angularjs unit testing - ng-disabled not working when adding text to textarea -

How to start daemon on android by adb -