精华内容
下载资源
问答
  • package ...import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.io.InputStream;import java.lang.reflect.Method;i...

    package com.citics.platformx.test.controller;

    import java.beans.BeanInfo;

    import java.beans.Introspector;

    import java.beans.PropertyDescriptor;

    import java.io.InputStream;

    import java.lang.reflect.Method;

    import java.util.ArrayList;

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.List;

    import java.util.Properties;

    import java.util.Set;

    import com.citics.test.model.DynamicBean;

    import com.citics.test.model.LeapRole;

    public class ClassUtil {

    private String filepath="/config/";//配置文件路径

    public String getFilepath() {

    return filepath;

    }

    public void setFilepath(String filepath) {

    this.filepath = filepath;

    }

    @SuppressWarnings({ "rawtypes","unchecked"})

    public Object dynamicClass(Object object) throws Exception{

    HashMap returnMap = new HashMap();

    HashMap typeMap=new HashMap();

    //读取配置文件

    Properties prop=new Properties();

    String sourcepackage=object.getClass().getName();

    String classname=sourcepackage.substring(sourcepackage.lastIndexOf(".")+1);

    InputStream in=ClassUtil.class.getResourceAsStream(filepath+classname+".properties");

    prop.load(in);

    Set keylist=prop.stringPropertyNames();

    Class type=object.getClass();

    BeanInfo beanInfo = Introspector.getBeanInfo(type);

    PropertyDescriptor[] propertyDescriptors=beanInfo.getPropertyDescriptors();

    for(int i=0;i

    PropertyDescriptor descriptor=propertyDescriptors[i];

    String propertyName = descriptor.getName();

    if(!propertyName.equals("class")){

    Method readMethod=descriptor.getReadMethod();

    Object result = readMethod.invoke(object, new Object[0]);

    if (result != null) {

    returnMap.put(propertyName, result);

    } else {

    returnMap.put(propertyName, "");

    }

    typeMap.put(propertyName, descriptor.getPropertyType());

    }

    }

    //加载配置文件中的属性

    Iterator iterator=keylist.iterator();

    while(iterator.hasNext()){

    String key=iterator.next();

    returnMap.put(key, prop.getProperty(key));

    typeMap.put(key, Class.forName("java.lang.String"));

    }

    //map转换成实体对象

    DynamicBean bean = new DynamicBean(typeMap);

    //赋值

    Set keys=typeMap.keySet();

    for(Iterator it=keys.iterator();it.hasNext();){

    String key = (String) it.next();

    bean.setValue(key, returnMap.get(key));

    }

    Object obj=bean.getObject();

    return obj;

    }

    public static void main(String[] args) throws Exception{

    new ClassUtil().dynamicClass(new LeapRole());

    }

    }

    展开全文
  • Java运行时动态生成类几种方式

    千次阅读 2021-02-12 10:23:51
    所以想到将公共逻辑写到父类实现,将特定逻辑根据字符串动态生成处理。这就可以一劳永逸解决这个问题。那就着手从Java如何根据字符串模板在运行时动态生成对象。Java是一门静态语言,通常,我们需要...

    最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则。这就要求根据数据库数据动态生成对象处理特定规则的逻辑。如果手写不仅每次都要修改代码,还要每次测试发版,而且无法灵活根据用户定义的规则动态处理逻辑。所以想到将公共逻辑写到父类实现,将特定逻辑根据字符串动态生成子类处理。这就可以一劳永逸解决这个问题。

    那就着手从Java如何根据字符串模板在运行时动态生成对象。

    Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢?

    经过一番网上资料查找,由繁到简的方式总结如下:

    一、利用JDK自带工具类实现

    现在问题来了,动态生成字节码,难度有多大?

    如果我们要自己直接输出二进制格式的字节码,在完成这个任务前,必须先认真阅读JVM规范第4章,详细了解class文件结构。估计读完规范后,两个月过去了。

    所以,第一种方法,自己动手,从零开始创建字节码,理论上可行,实际上很难。

    第二种方法,使用已有的一些能操作字节码的库,帮助我们创建class。

    目前,能够操作字节码的开源库主要有CGLib和Javassist两种,它们都提供了比较高级的API来操作字节码,最后输出为class文件。

    比如CGLib,典型的用法如下:

    Enhancer e = newEnhancer();

    e.setSuperclass(...);

    e.setStrategy(newDefaultGeneratorStrategy() {protectedClassGenerator transform(ClassGenerator cg) {return newTransformingGenerator(cg,new AddPropertyTransformer(new String[]{ "foo"},newClass[] { Integer.TYPE }));

    }});

    Object obj= e.create();

    比自己生成class要简单,但是,要学会它的API还是得花大量的时间,并且,上面的代码很难看懂对不对?

    有木有更简单的方法?

    有!

    Java的编译器是javac,但是,在很早很早的时候,Java的编译器就已经用纯Java重写了,自己能编译自己,行业黑话叫“自举”。从Java 1.6开始,编译器接口正式放到JDK的公开API中,于是,我们不需要创建新的进程来调用javac,而是直接使用编译器API来编译源码。

    使用起来也很简单:

    JavaCompiler compiler =ToolProvider.getSystemJavaCompiler();int compilationResult = compiler.run(null, null, null, '/path/Test.java');

    这么写编译是没啥问题,问题是我们在内存中创建了Java代码后,必须先写到文件,再编译,最后还要手动读取class文件内容并用一个ClassLoader加载。

    有木有更简单的方法?

    有!

    其实Java编译器根本不关心源码的内容是从哪来的,你给它一个String当作源码,它就可以输出byte[]作为class的内容。

    所以,我们需要参考Java Compiler API的文档,让Compiler直接在内存中完成编译,输出的class内容就是byte[]。

    Mapresults;

    JavaCompiler compiler=ToolProvider.getSystemJavaCompiler();

    StandardJavaFileManager stdManager= compiler.getStandardFileManager(null, null, null);try (MemoryJavaFileManager manager = newMemoryJavaFileManager(stdManager)) {

    JavaFileObject javaFileObject=manager.makeStringSource(fileName, source);

    CompilationTask task= compiler.getTask(null, manager, null, null, null, Arrays.asList(javaFileObject));if(task.call()) {

    results=manager.getClassBytes();

    }

    }

    上述代码的几个关键在于:

    用MemoryJavaFileManager替换JDK默认的StandardJavaFileManager,以便在编译器请求源码内容时,不是从文件读取,而是直接返回String;

    用MemoryOutputJavaFileObject替换JDK默认的SimpleJavaFileObject,以便在接收到编译器生成的byte[]内容时,不写入class文件,而是直接保存在内存中。

    最后,编译的结果放在Map中,Key是类名,对应的byte[]是class的二进制内容。

    为什么编译后不是一个byte[]呢?

    因为一个.java的源文件编译后可能有多个.class文件!只要包含了静态类、匿名类等,编译出的class肯定多于一个。

    如何加载编译后的class呢?

    加载class相对而言就容易多了,我们只需要创建一个ClassLoader,覆写findClass()方法:

    class MemoryClassLoader extendsURLClassLoader {

    Map classBytes = new HashMap();public MemoryClassLoader(MapclassBytes) {super(new URL[0], MemoryClassLoader.class.getClassLoader());this.classBytes.putAll(classBytes);

    }

    @Overrideprotected Class> findClass(String name) throwsClassNotFoundException {byte[] buf =classBytes.get(name);if (buf == null) {return super.findClass(name);

    }

    classBytes.remove(name);return defineClass(name, buf, 0, buf.length);

    }

    }

    总结以上,那么我们来编写一个Java脚本引擎吧:

    二、利用三方Jar包实现

    利用三方包com.itranswarp.compiler来实现:

    1. 引入Maven依赖包:

    2. 编写工具类

    public classStringCompiler {public static Object run(String source, String...args) throwsException {//声明类名

    String className = "Main";

    String packageName= "top.fomeiherz";//声明包名:package top.fomeiherz;

    String prefix = String.format("package %s;", packageName);//全类名:top.fomeiherz.Main

    String fullName = String.format("%s.%s", packageName, className);//编译器

    JavaStringCompiler compiler = newJavaStringCompiler();//编译:compiler.compile("Main.java", source)

    Map results = compiler.compile(className + ".java", prefix +source);//加载内存中byte到Class>对象

    Class> clazz =compiler.loadClass(fullName, results);//创建实例

    Object instance =clazz.newInstance();

    Method mainMethod= clazz.getMethod("main", String[].class);//String[]数组时必须使用Object[]封装//否则会报错:java.lang.IllegalArgumentException: wrong number of arguments

    return mainMethod.invoke(instance, newObject[]{args});

    }

    }

    3. 测试执行

    public classStringCompilerTest {public static void main(String[] args) throwsException {//传入String类型的代码

    String source = "import java.util.Arrays;public class Main" +

    "{" +

    "public static void main(String[] args) {" +

    "System.out.println(Arrays.toString(args));" +

    "}" +

    "}";

    StringCompiler.run(source,"1", "2");

    }

    }

    三、利用Groovy脚本实现

    以上两种方式尝试过,后来发现Groovy原生就支持脚本动态生成对象。

    1. 引入Groovy maven依赖

    org.codehaus.groovy

    groovy-all

    2.4.13

    2. 直接上测试代码

    @Testpublic void testGroovyClasses() throwsException {//groovy提供了一种将字符串文本代码直接转换成Java Class对象的功能

    GroovyClassLoader groovyClassLoader = newGroovyClassLoader();//里面的文本是Java代码,但是我们可以看到这是一个字符串我们可以直接生成对应的Class>对象,而不需要我们写一个.java文件

    Class> clazz = groovyClassLoader.parseClass("package com.xxl.job.core.glue;\n" +

    "\n" +

    "public class Main {\n" +

    "\n" +

    " public int age = 22;\n" +

    " \n" +

    " public void sayHello() {\n" +

    " System.out.println(\"年龄是:\" + age);\n" +

    " }\n" +

    "}\n");

    Object obj=clazz.newInstance();

    Method method= clazz.getDeclaredMethod("sayHello");

    method.invoke(obj);

    Object val=method.getDefaultValue();

    System.out.println(val);

    }

    四、利用Scala脚本实现

    1. 定义工具类

    package com.damll.rta.flink.utils

    import java.lang.reflect.Method

    import java.util

    import java.util.UUID

    import scala.reflect.runtime.universe

    import scala.tools.reflect.ToolBox

    case class ClassInfo(clazz: Class[_], instance: Any, defaultMethod: Method, methods: Map[String, Method]) {

    def invoke[T](args: Object*): T = {

    defaultMethod.invoke(instance, args: _*).asInstanceOf[T]

    }

    }

    object ClassCreateUtils {

    private val clazzs = new util.HashMap[String, ClassInfo]()

    private val classLoader = scala.reflect.runtime.universe.getClass.getClassLoader

    private val toolBox = universe.runtimeMirror(classLoader).mkToolBox()

    def apply(classNameStr: String, func: String): ClassInfo = this.synchronized {

    var clazz = clazzs.get(func)

    if (clazz == null) {

    val (className, classBody) = wrapClass(classNameStr, func)

    val zz = compile(prepareScala(className, classBody))

    val defaultMethod = zz.getDeclaredMethods.head

    val methods = zz.getDeclaredMethods

    clazz = ClassInfo(

    zz,

    zz.newInstance(),

    defaultMethod,

    methods = methods.map { m => (m.getName, m) }.toMap

    )

    clazzs.put(func, clazz)

    }

    clazz

    }

    def compile(src: String): Class[_] = {

    val tree = toolBox.parse(src)

    toolBox.compile(tree).apply().asInstanceOf[Class[_]]

    }

    def prepareScala(className: String, classBody: String): String = {

    classBody + "\n" + s"scala.reflect.classTag[$className].runtimeClass"

    }

    def wrapClass(className:String, function: String): (String, String) = {

    //val className = s"dynamic_class_${UUID.randomUUID().toString.replaceAll("-", "")}"

    val classBody =

    s"""

    |class $className extends Serializable{

    | $function

    |}

    """.stripMargin

    (className, classBody)

    }

    }

    2. 调用动态加载类

    object CreateTest {

    def main(args: Array[String]): Unit = {

    val cim = ClassCreateUtils("Calculator", "def toUps(str:String):String = str.toUpperCase")

    val value = cim.methods("toUps").invoke(cim.instance, "hello")

    println(value) // method1

    println(cim.invoke("World")) // method2

    }

    }

    3. 运行结果

    HELLO

    WORLD

    五、利用Aviator脚本实现

    1. 引入jar

    com.googlecode.aviator

    aviator

    4.2.10

    2. 编写代码

    @Testpublic void testAviatorClasses() throwsException {final ScriptEngineManager manager = newScriptEngineManager();

    ScriptEngine engine= manager.getEngineByName("JavaScript");//AviatorScript code in a String. This code defines a script object 'obj'//with one method called 'hello'.

    String script =

    "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";//evaluate script

    engine.eval(script);//javax.script.Invocable is an optional interface.//Check whether your script engine implements or not!//Note that the AviatorScript engine implements Invocable interface.

    Invocable inv =(Invocable) engine;//get script object on which we want to call the method

    Object obj = engine.get("obj");//invoke the method named "hello" on the script object "obj"

    inv.invokeMethod(obj, "hello", "Script Method !!");

    }

    68f724bad5a33d9a9f6bd2ca7369ecb7.png

    展开全文
  • 使用swagger和yaml生成java类

    千次阅读 2021-03-09 05:40:03
    我想用maven插件swagger-codegen-...在这里我的pom.xml的配置文件:使用swagger和yaml生成java类io.swaggerswagger-codegen-maven-plugin2.2.3generate${basedir}/src/main/resources/swagger/project.yamljavas...

    我想用maven插件swagger-codegen-maven-plugin版本2.2.3生成我的Java类。在这里我的pom.xml的配置文件:使用swagger和yaml生成java类

    io.swagger

    swagger-codegen-maven-plugin

    2.2.3

    generate

    ${basedir}/src/main/resources/swagger/project.yaml

    java

    src/gen/java/main

    我project.yaml文件包含此:产生

    definitions:

    Parent:

    type: "object"

    discriminator: "type"

    required:

    - type

    properties:

    id:

    type: "integer"

    format: "int64"

    code:

    type: "string"

    ChildA:

    allOf:

    - $ref: "#/definitions/Parent"

    - properties:

    attributeA:

    type: "string"

    ChildB:

    allOf:

    - $ref: "#/definitions/Parent"

    - properties:

    attributeB:

    type: "string"

    所有3类,然后我想用网络来创建ChildA或ChildB服务。所以,我的方法是:

    @POST

    public Response createChild(@WebParam Parent parent) {

    ...

    }

    使用邮差,我把下面的JSON,以便创造一个ChildA实例:

    {

    "code": "child-a",

    "attributeA": "value"

    }

    以下例外情况:

    Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "attributeA" (class io.swagger.client.model.Parent), not marked as ignorable (2 known properties: "code", "id"])

    at [Source: [email protected]; line: 3, column: 17] (through reference chain: io.swagger.client.model.Parent["attributeA"])

    我在读几个地方,我需要我的Parent类的一些注释,如:

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")

    @JsonSubTypes({ @Type(value = ChildA.class, name = "ChildA"),

    @Type(value = ChildB.class, name = "ChildB") })

    但我不知道如何修改我的YAML文件中添加的这些注释。有人可以帮助我吗?

    2017-10-06

    cheb1k4

    展开全文
  • 文章目录案例说明动态生成类工具类动态生成类示例生产环境运行报错 案例说明 我们有一个Person: package test; import lombok.Data; @Data public abstract class Person { private String name; public ...

    案例说明

    我们有一个Person类:

    package test;
    
    import lombok.Data;
    
    @Data
    public abstract class Person {
    
        private String name;
    
        public abstract void sayHello();
    }
    

    Person类有一个抽象方法 sayHello,但是具体有哪些Person并不知道,需要配置在数据库中,然后动态进行生成Person的子类。

    动态生成类工具类

    <dependency>
           <groupId>org.codehaus.groovy</groupId>
           <artifactId>groovy-all</artifactId>
           <version>2.4.13</version>
    </dependency>
    

    工具类代码如下:

    package test;
    
    import groovy.lang.GroovyClassLoader;
    
    public class CompilerUtil {
    
        public static Class generateClass(String javaFilename, String packageName, String javaCode) throws Exception {
    
            GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
    
            String prefix = String.format("package %s;", packageName);
    
            return groovyClassLoader.parseClass(prefix + "\n" + javaCode);
        }
    }
    
    
    

    动态生成类示例

    package test;
    
    import groovy.lang.GroovyClassLoader;
    
    
    public class CompilerUtil {
    
        public static Class generateClass(String javaFilename, String packageName, String javaCode) throws Exception {
    
            GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
    
            String prefix = String.format("package %s;", packageName);
    
            return groovyClassLoader.parseClass(prefix + "\n" + javaCode);
        }
    
        public static void main(String[] args) throws Exception {
            String teacherCode = "public class Teacher extends Person {\n" +
                    "\n" +
                    "    @Override\n" +
                    "    public void sayHello() {\n" +
                    "        System.out.println(\"My name is \" + getName() + \", I am a teacher\");\n" +
                    "    }\n" +
                    "}\n";
    
            Class teacherClass = generateClass("Teacher", "test", teacherCode);
            Person person = (Person) teacherClass.newInstance();
            person.setName("Tom");
            person.sayHello();
        }
    }
    

    输出:

    My name is Tom, I am a teacher
    
    展开全文
  • Java是一门静态语言,通常,我们需要的class在编译的时候就已经生成了,为什么有时候我们还想在运行时动态生成class呢?因为在有些时候,我们还真得在运行时为一个类动态创建子类。比如,编写一个ORM框架,如何得知一...
  • java通过cglib动态生成实体bean

    万次阅读 2021-01-08 15:50:49
    DynamicBeanEntity.class动态bean: package com.dym.entity; import net.sf.cglib.beans.BeanGenerator; import org.apache.commons.collections.map.MultiValueMap; import java.lang.reflect.*; import java....
  • wsdl自动生成Java代码,根据wsdl生成Java代码>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>蕃...
  • java动态生成pdf文件并下载 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助...
  • JAVA 动态生成变量名

    千次阅读 2021-02-12 22:14:48
    比如list对象已经获得一组TreeView节点遍历LIST下面做了2个判断若某属性是0则创建根节点是1则创建子节点放在第一个跟节点下然后问题就出现了创建的Node1在第一个IF里第二个IF获取不到...比如 list 对象 已经获得 一...
  • 以下代码将生成一个名为“foo.bar.ClassWithFields”的,其中包含字段“var0”到“var99”。当然,除了反射之外,没有办法访问这些字段,因为它们在编译时不存在,Java是一种静态类型的语言。import org.objectweb...
  • Java 类动态添加属性字段的操作

    千次阅读 2021-03-05 22:37:02
    如截图中的两列因为列是动态的, 首先想到的就是后天拼接JSON格式字符串, 然后返回到前台, 组装表头及内容。但是当前系统中easyUI版本为1.2,并不支持 data属性(官方从1.3.2开始支持)。所以只能返回list 格式。...
  • Java由实体类生成建表

    2021-02-28 11:27:24
    在我们参考别人项目时候特别是SSM项目没有sql文件的时候我们如何由实体类生成数据库表接下来就和大家一起探讨这个问题package ltd.newbee.mall;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java...
  • Java代码实体类生成SQL语句(Java实体转数据库)

    万次阅读 多人点赞 2021-07-19 17:43:04
    有的时候把数据库删了,如果照着实体重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体转换为SQL语句输出为一个文件,打开执行命令即可。 代码如下: ...
  • 这个可以直接用在项目开发中,直接上代码:import java.io.Serializable;import java.util.Random;import java.util.UUID;/*** 编号 生成器* @author Java自学通**/public final class MyIncrementGenerator {...
  • java生成兑换码礼包码--工具

    千次阅读 2021-02-12 18:26:31
    importjava.util.HashSet;importjava.util.Random;importjava.util.Set;public classGenSerial {private static final String Base32Alphabet = .../*** 生成新的序列号 * 生成规则:45位的数 (...
  • 相信每个做java开发的读者,都接触过SQL建表语句,尤其是在项目开发初期,因为数据库是项目的基石。在现代项目开发中,出现...因此,很多时候,我们需要将原始的SQL建表语句转换成java实体,这项工作看似简单,但...
  • JAVA自动生成正则表达式工具

    千次阅读 2021-02-12 22:07:23
    /*** 正则表达式生成工具*@author朱志杰 QQ:862990787*/public classRegexUtil {//记录拼接的表达式private StringBuffer sb=newStringBuffer();//正则表达式的特殊字符,需要进行转义处理private String ...
  • 项目简介: 技术简介:JSP页面+SSM框架+JS+itextpdf ... 实施方案:js点击事件向后端传id,window.open新开窗口,后端根据id查询数据库返回数据组装,itext画出PDF文件,返回流给前端页面 核心代码: ...
  • * 动态数据导出 * * @param headerList 需要导出的表头名称 * @param paramList 需要导出的数据 */ public static void exportDynami(List<String> headerList, List<Object> paramList) { // ...
  • java如何生成申请单序列号

    千次阅读 2021-03-17 21:39:10
    import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.lang3.../*** 产生流水号工具* @version V1.0* @date: 2013-11-16 下午5:21:37*/public class SerialNum {private static St...
  • java快速生成数据库文档

    千次阅读 2021-04-03 14:05:52
    倒不是难,而是比较繁琐,举例来说,像编写数据库文档这种操作来说,对于新手,甚至很多有一定开发经验的同学来说,都觉得是一件费力得事情,下面推荐一个小组件,并提供一段程序,帮助有需要得同学快速生成数据库...
  • Java 生成随机数

    千次阅读 2021-02-12 10:14:07
    1.protected int next(int bits)://生成下一个伪随机数。2.boolean nextBoolean()://返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的boolean值。3.void nextBytes(byte[] bytes)://生成随机字节并将...
  • java-mybatis逆向工程生成实体接口

    千次阅读 2021-12-07 20:25:59
    需要更改的地方 1、需要找到自己本地的mysql.jar,进行更换 2、需要更改自己本地数据库进行更改 3、实体层生产的位置,也需要自己去更改 4、放置自己数据库的表 以上配置完以后,就需要去生成实体层了 ok展示完毕,...
  • Java名字生成

    千次阅读 2021-03-08 06:02:24
    有时需要自动生成名字,...为了方便生成“任意字符串+数字”的名字,我写了下面的工具。使用方法List existingNames = Lists.newArrayList("Trump", "NewName1","NewName4", "KFC" ,"NewName5", "Custom Name")...
  • java工具(三)之生成若干位随机数

    千次阅读 2021-02-12 11:22:45
    java生成若干位随机数的问题在一次编程的过程中偶然碰到一个小问题,就是需要生成一个4位数的随机数,如果是一个不到4位大的数字,前面可以加0来显示。因为要求最后是一个4位的整数,不带小数点。当时就想到了几个...
  • java生成随机数,生成唯一hash值

    千次阅读 2021-03-10 11:10:40
    可以使用该工具类生成唯一密钥 java.util.Random.RandomStringUtils 有如下方法: 常用方法: /** * count 指定创建一个随机串的长度 * letters true表示生成的字符串可以包括字母字符 * numbers true...
  • 动态数组java实现

    千次阅读 2021-02-12 10:06:58
    动态数组相对于一般数组的优势是可以灵活地添加或删除元素。而一般数组则受限于固定的内存空间。只能有限的添加元素动态数组(Dynamic Array)接口设计◼ int size(); // 元素的数量◼ boolean isEmpty(); // 是否为空...
  • java快速生成接口文档方法总结

    千次阅读 2021-07-27 19:36:22
    前言 常常在项目收尾阶段,客户需要项目的接口文档,或者是一个大的sass平台,各个产品之间互相调用的时候,需要对方提供接口文档 ...这是一种最简单也最高效的快速生成接口文档的方式,也是对既有
  • java – 自动生成id

    千次阅读 2021-02-12 09:27:44
    您需要一个静态成员来跟踪上次使用的索引.一定要实现一个复制构造函数:class students{private static int next_id = 0; // private int id; // private String name;public students(String name){this.id = ++...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,154,943
精华内容 861,977
关键字:

动态生成java类

java 订阅