Table of Contents
What is an extension method?
Traditional writing method:
Use Stream writing method:
How to implement it in Java Extension methods
Preparation conditions
Writing extension methods
Array extension method
Home Java javaTutorial What is Java's missing feature extension methods

What is Java's missing feature extension methods

May 20, 2023 pm 04:58 PM
java

    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:

    What is Javas missing feature extension methods

    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

    What is Javas missing feature extension methods

    and the toString method of the array uses Manifold to define the array Extension method ManArrayExt.toString(@This Object array):

    What is Javas missing feature extension methods

    [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

    What is Javas missing feature extension methods

    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):

    What is Javas missing feature extension methods

    But if it is the original Type array, the return value indicated by IDEA is:

    What is Javas missing feature extension methods

    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:)

    What is Javas missing feature extension methods

    ##—— Make a wish and hope that Project Valhalla will be released soon.

    We often see in various projects that everyone first packages an object into Optional, and then performs filter, map, etc. Through the type mapping of @Self, you can add a very practical method to Object like this:

    Then any object will have the asOpt() method.

    Compared with the unnatural need to wrap it before:

    You can now use Optional naturally:

    Of course, Object is the parent class of all classes, so You still need to think carefully about whether it is appropriate to do it.

    Extended static methods

    We all know that Java9 adds factory methods to collections:

    Are you jealous? Because if you are not using Java 9 and above (Java 8: just show me your ID card), you have to use a library like Guava. However, ImmutableList.of is not as good as List.of in use. It comes naturally.

    It doesn't matter, Manifold said: "It doesn't matter, I will take action." Extending static methods based on Manifold is to add @Extension to the static method of the extension class:

    Then you can deceive yourself into using a version after Java8 - you can do whatever you want , I use Java8.

    BTW, because Object is the parent class of all classes, if you add a static extension method to Object, it means that you can directly access this static method anywhere without the need to import - Congratulations You, unlock the "top function".

    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!

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    Video Face Swap

    Video Face Swap

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

    Hot Article

    Roblox: Bubble Gum Simulator Infinity - How To Get And Use Royal Keys
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    Nordhold: Fusion System, Explained
    4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    Mandragora: Whispers Of The Witch Tree - How To Unlock The Grappling Hook
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    Hot Topics

    Java Tutorial
    1670
    14
    PHP Tutorial
    1274
    29
    C# Tutorial
    1256
    24
    PHP: A Key Language for Web Development PHP: A Key Language for Web Development Apr 13, 2025 am 12:08 AM

    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 vs. Python: Understanding the Differences PHP vs. Python: Understanding the Differences Apr 11, 2025 am 12:15 AM

    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.

    Break or return from Java 8 stream forEach? Break or return from Java 8 stream forEach? Feb 07, 2025 pm 12:09 PM

    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 vs. Other Languages: A Comparison PHP vs. Other Languages: A Comparison Apr 13, 2025 am 12:19 AM

    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 vs. Python: Core Features and Functionality PHP vs. Python: Core Features and Functionality Apr 13, 2025 am 12:16 AM

    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.

    PHP's Impact: Web Development and Beyond PHP's Impact: Web Development and Beyond Apr 18, 2025 am 12:10 AM

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

    PHP: The Foundation of Many Websites PHP: The Foundation of Many Websites Apr 13, 2025 am 12:07 AM

    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 vs. Python: Use Cases and Applications PHP vs. Python: Use Cases and Applications Apr 17, 2025 am 12:23 AM

    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.

    See all articles