What is Java's missing feature extension methods
What is an extension method?
An extension method is the ability to "add" methods directly to an existing type without creating a new one. derived type, recompile, or otherwise modify an existing type. When calling an extension method, there is no discernible difference compared to calling the method actually defined in the type.
Why extension methods are needed
Consider implementing this function: after taking out a string containing multiple product IDs from Redis (each product ID is separated by an English comma), first compare the product IDs Remove duplicates (and maintain the order of elements), and finally use commas to connect the product IDs.
Traditional writing method:
Use Stream writing method:
Assume that extension methods can be implemented in Java, and we add the extension method toList for the array (turn the array into a List) , added the extension method toSet for List (turning List into LinkedHashSet), and added the extension method join for Collection (to connect the string forms of elements in the collection using the given connector), then we will be able to write code like this:
I believe you already have the answer to why extension methods are needed at this point:
You can directly enhance the existing class library instead of using tool classes
Compared Use tool classes and use the methods of the type itself to write code more smoothly and more comfortably
The code is easier to read because it is a chain call instead of using static method nesting dolls
How to implement it in Java Extension methods
Let’s first ask about the recently popular ChatGPT:
ChatGPT’s view is that in Java, extension methods are provided through tool classes Implemented by static method. So next I will introduce a brand new black technology:
Manifold
Preparation conditions
Manifold and Lombok work similarly, both are compiled through annotation processors processed when. In order to use Manifold effectively, you need to install the Manifold IDEA plug-in in IDEA
and then add annotationProcessorPaths to the maven-compiler-plugin of the project pom:
If you use Lombok in your project, Lombok needs to be added to annotationProcessorPaths:
Writing extension methods
In JDK, the split method of String uses a string as a parameter, that is, String[] split(String). Let's now add an extension method String[] split(char) to String: Split by given characters.
Based on Manifold, write extension methods:
You can find static methods that are essentially tool classes, but there are some requirements:
Tool classes need to use Manifold’s @Extension annotation
In static methods, the parameters of the target type need to be annotated with @This
The package name where the tool class is located needs to end with extensions.the fully qualified class name of the target type
——Students who have used C# will probably smile knowingly. This is the extension method of imitated C#.
Regarding point 3, the reason for this requirement is that Manifold hopes to quickly find extension methods in the project, avoid annotation scanning of all classes in the project, and improve processing efficiency.
Having the ability to extend methods, now we can call it like this:
Amazing! And you can find that System.out.println(numStrs.toString()) actually prints the string form of the array object - not the address of the array object. Browse the decompiled App.class and observe that the extension method call has been replaced by a static method call
and the toString method of the array uses Manifold to define the array Extension method ManArrayExt.toString(@This Object array):
[Ljava.lang.String;@511d50c0 What, Goodbye, never see you again~
Because extension method calls are replaced with static method calls at compile time, using Manifold's extension method, there is no problem even if the object of the calling method is null, because the processed code passes null as a parameter to the corresponding static method. For example, to extend Collection:
Then when calling:
java.lang.NullPointerException, Goodbye, never see you again~
Array extension method
We see List written like this: @Self is used to indicate what type the annotated value should be. If it is @Self, that is, @Self(false), which represents the annotated value. The value is of the same type as the value of the @This annotation; @Self(true) indicates the type of the elements in the array.
For object arrays, we can see that the toList method returns the corresponding List (T is the type of array element):
But if it is the original Type array, the return value indicated by IDEA is:
But I am using Java, how can erasure method generics have such a great function as List - So you can only use native types to receive this return value:)
The above is the detailed content of What is Java's missing feature extension methods. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHP is suitable for web development, with simple syntax and high execution efficiency. 2. Python is suitable for data science and machine learning, with concise syntax and rich libraries.

Java 8 introduces the Stream API, providing a powerful and expressive way to process data collections. However, a common question when using Stream is: How to break or return from a forEach operation? Traditional loops allow for early interruption or return, but Stream's forEach method does not directly support this method. This article will explain the reasons and explore alternative methods for implementing premature termination in Stream processing systems. Further reading: Java Stream API improvements Understand Stream forEach The forEach method is a terminal operation that performs one operation on each element in the Stream. Its design intention is

PHP is suitable for web development, especially in rapid development and processing dynamic content, but is not good at data science and enterprise-level applications. Compared with Python, PHP has more advantages in web development, but is not as good as Python in the field of data science; compared with Java, PHP performs worse in enterprise-level applications, but is more flexible in web development; compared with JavaScript, PHP is more concise in back-end development, but is not as good as JavaScript in front-end development.

PHP and Python each have their own advantages and are suitable for different scenarios. 1.PHP is suitable for web development and provides built-in web servers and rich function libraries. 2. Python is suitable for data science and machine learning, with concise syntax and a powerful standard library. When choosing, it should be decided based on project requirements.

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP is suitable for web development and content management systems, and Python is suitable for data science, machine learning and automation scripts. 1.PHP performs well in building fast and scalable websites and applications and is commonly used in CMS such as WordPress. 2. Python has performed outstandingly in the fields of data science and machine learning, with rich libraries such as NumPy and TensorFlow.
