2

I want to reference this class type in generic interface.

I need this to enforce interface implementations to implement two methods which return implementations of generic classes with this class type as generic parameter.


Let's assume I have two interfaces: Cover.java and Adaptor.java

interface Cover<P extends Phone> {
    P getPhone();
}

interface Adaptor<P extends Phone> {
    P getPhone();
}


I want to create generic interface, that encourage it's implementations to return Cover and Adaptor with itself as generic parameter

// <T> should reference to current Phone implementation
public interface Phone {
   Cover<T> getCover();
   Adaptor<T> getAdaptor();
}


As a result I want:

//correct
public class Iphone implements Phone {
   Cover<Iphone> getCover(); // <- I want this to be compile-time controlled
   Adaptor<Iphone> getAdaptor(); // <- I want this to be compile-time controlled
}

// compile-time exception
public class Samsung implements Phone {
  Cover<Iphone> getCover(); // <- CTE
   Adaptor<Iphone> getAdaptor(); // <- CTE
}

Is there any way to achieve this in Java 7?

ivstas
  • 1,203
  • 1
  • 16
  • 31

0 Answers0