How to implement a 'generate getter/setter' for a Java Class in emacs?

后端 未结 4 851
别跟我提以往
别跟我提以往 2021-02-07 10:27

Sometimes I miss the laziness of using an IDE that let me just write the attribute of a Java class and then let the IDE generate the required getter/setter.

Can Emacs do

4条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-07 11:01

    You asked specifically about generating a getter/setter pair. And you can write elisp to do this. But it may be interesting to look into a more general solution.

    To solve this generally, I use ya-snippet . The name refers to "Yet Another Snippet package", so you can be sure the problem has been solved before. But I found ya-snippet to be the most useful, simple, and capable solution, for my needs.

    For a property with a getter/setter, I type

    prop
    

    ...and I get a template that I can then fill in, like a form. I specify the name of the property, and everything else is generated. Very nice, easy.

    enter image description here

    This works for any micro-pattern you commonly use in code. I have snippets for a singleton, constructor, for loops, switch statements, try/catch, and so on.

    The key with ya-snippet is there is no elisp code to write. Basically I just provide the text for the template, and it works. This is the ya-snippet code for the getter/setter snippet you see above:

    # name : getter/setter property ... { ... }
    # key: prop
    # --
    private ${1:Type} _${2:Name};
    public ${1:Type} get$2 {
        ${3://get impl}
    }
    public void set$2($1 value) {
        ${4://set impl}
    }
    

    Everything above the "# --" is metadata for the snip. The "key" is the most important bit of that metadata - it is the short sequence that can be expanded. The name is shown on the yasnippet menu. The stuff below the # -- line is the expansion code. It includes several fill-in fields.

    YAsnippet works for any programming mode in emacs (java, php, c#, python, etc) and it works for other text modes too.

提交回复
热议问题