Java Generics with Class and Interface Compatibility
In Java, creating a class object with specific constraints can be challenging. A common scenario is defining a class object that extends a particular class while simultaneously implementing a specific interface. However, achieving both constraints simultaneously using generics has been a common point of contention.
Attempts to force a class to extend ClassA and implement interface InterfaceB using the syntax:
Class extends ClassA>
or
Class extends InterfaceB>
will only satisfy one requirement and fail to combine both.
Solution
Fortunately, Java generics allow for multiple interfaces or class plus interfaces. To achieve this, modify the wildcard declaration as follows:
As illustrated in the Generics Tutorial by Sun, by appending & InterfaceName for each additional required interface, an arbitrarily complex combination can be achieved. For example, the JavaDoc declaration of Collections#max demonstrates this complexity:
public static> T max(Collection extends T> coll)
Preserving binary compatibility necessitates these intricate declarations.
Implementation with Class and Interface Constraints
To implement the desired restriction in a variable declaration, place a generic boundary on a class:
class classB { } interface interfaceC { } public class MyClass{ Class variable; }
Conclusion
Java generics provide flexible ways to create constrained class and interface combinations. By understanding the syntax and limitations, developers can leverage this power to enforce specific requirements in their code.
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3