Java语言怎么定义2个函数,函数的名字只有大小写的区分,系统调用小写的对应的函数

Java语言怎么定义2个函数,函数的名字只有大小写的区分,当大写的函数不存在的时候,系统调用小写的对应的函数,如果都不存在则不调用

你可以自己修改

 String functionNameUpperCase = "Functiona";

来看执行效果. 如有帮助给个采纳谢谢
效果如图:

img

代码如下 :


import java.lang.reflect.Method;

public class FunctionExample {
    public static void main(String[] args) {
        String functionNameUpperCase = "Functiona";
        
        // 尝试调用大写函数
        if (!invokeMethodIfExists(functionNameUpperCase)) {
            // 大写函数不存在时,尝试调用小写函数
            String functionNameLowerCase = functionNameUpperCase.toLowerCase();
            invokeMethodIfExists(functionNameLowerCase);
        }
    }

    public static boolean invokeMethodIfExists(String methodName) {
        try {
            Method method = FunctionExample.class.getMethod(methodName);
            method.invoke(null);
            return true;
        } catch (NoSuchMethodException | IllegalAccessException | IllegalArgumentException | java.lang.reflect.InvocationTargetException e) {
            return false;
        }
    }

    public static void FunctionA() {
        System.out.println("调用了大写函数 FunctionA");
    }

    public static void functiona() {
        System.out.println("调用了小写函数 functiona");
    }
}

函数命名有规范的(不是强制),但是调用不存在的函数时编译不通过。可以写名称相同但参数不同的多个函数(重载),调用时会根据参数自动匹配合适的函数去执行,有疑问可回复评论

可以通过反射来实现。

测试代码如下:

参考链接:


Java反射——如何通过Java中的反射调用对象的方法?_反射执行对象的方法_☆七年的博客-CSDN博客 一.Java反射拿到调用对象的方法1.通过Class.forName(“包名+方法的类名”)拿到方法的对象;如:Class<?> clazz = Class.forName("ReflectionTest"); 也可以通过实例,获取方法的对象类, 如:String str = "test , reflection"; ..._反射执行对象的方法 https://blog.csdn.net/ly_xiamu/article/details/82900482

Java 反射判断类中是否包含某个方法 Java反射判断类中是否存在某个属性(字段)_java判断类是否有某个方法_HaHa_Sir的博客-CSDN博客 Java 反射判断类中是否包含某个方法 Java反射判断类中是否存在某个属性(字段)一、前言在java中,可以通过反射获取类中的所有属性和方法,要判断类中是否包含某个方法或某个属性,使用常见的 getMethod() / getDeclaredMethod() 和 getField() / getDeclaredField() 即可获得对象方法、属性;再判断对象是否为null,即属性是否存在。这里有一个问题,若当前类的父类的私有属性、私有方..._java判断类是否有某个方法 https://blog.csdn.net/HaHa_Sir/article/details/124559273


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class TestMethod {

    public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, ClassNotFoundException, InstantiationException {
        // TODO Auto-generated method stub
        // https://blog.csdn.net/gao_chun/article/details/42875575
        TestMethod cls = new TestMethod();
        Class c = cls.getClass();
        
        // https://blog.csdn.net/ly_xiamu/article/details/82900482
        Class<?> clazz= Class.forName("TestMethod");;
        
                
        try {
            
            
            Class[] cArg = new Class[2];
            cArg[0] = String.class;
            cArg[1] = String.class;
            //  获取TestMethod类的小写方法add,如果不存在会抛NoSuchMethodException异常,
            //   如果有此方法,则会继续往下执行
            // https://blog.csdn.net/HaHa_Sir/article/details/124559273
            Method dMethod = c.getDeclaredMethod("add",cArg);
            
            System.out.println("方法add存在,调用如下:");
            // https://blog.csdn.net/ly_xiamu/article/details/82900482
            // 如果小写方法add存在,则使用反射调用此方法
            Object obj1 = dMethod.invoke(clazz.newInstance(),"你好,","大家好!");
            // 打印调用结果
            System.out.println("add调用结果:"+obj1);
            
        }catch(NoSuchMethodException e){
            System.out.println(e.getMessage()+",方法add不存在!");
            try {
                Class[] cArg = new Class[3];
                cArg[0] = int.class;
                cArg[1] = int.class;
                cArg[2] = int.class;
                // 如果小写方法add不存在,则判断大写方法Add是否存在
                // 同上,如果大写方法add不能存在,则抛NoSuchMethodException异常,
                // 如果存在,会继续往下
                Method dMethod = c.getDeclaredMethod("Add",cArg);
                System.out.println("方法Add存在,调用如下:");
                // 使用反射调用大写方法Add
                //Object obj1 = dMethod.invoke(clazz.newInstance(),"一,","二,",",三!");
                Object obj1 = dMethod.invoke(clazz.newInstance(),2,2,5);
                System.out.println("Add调用结果:"+obj1);
                
            }catch(NoSuchMethodException e2){
                System.out.println(e2.getMessage()+",方法Add不存在!");
                
                
             }
            
         }

        
    }
    
    // 模拟小写方法
//    public String add(String a,String b) {
//        return (a+b);
//    }
    
    // 模拟大写方法
    public int Add(int a,int b,int c) {
        return (a+b+c);
    }

}


img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/725378
  • 你也可以参考下这篇文章:(Java)输入一个字母,若是小写字母,则变为大写输出,否则,原样输出
  • 同时,你还可以查看手册:java-国际化 - 介绍如何设计软件,使其能够轻松适应(本地化)各种语言和地区。-与文本打交道》提供了以独立于本地的方式操作文本的技术。-转换非Unicode文本 中的内容
  • 除此之外, 这篇博客: 数据库创建表,查询表,对表进行增删改查,以及分组使用进行查询,还有排序中的 查询选修Java课程最后一名的学生信息(无相同分数的情况) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    select * from hw_studentinfo where course = ‘JAVA’ order by score asc limit 1;

  • 您还可以看一下 汤小洋老师的手把手搭建Java人力资源管理系统【附源码】(毕设)课程中的 人力资源管理系统简介小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    优化后问题已经很清晰,没有其他方面需要优化。

    下面是我对问题的解答:

    解答:

    在Java中,函数的名称是区分大小写的,因此我们不能定义仅仅在大小写上有区别的两个函数。如果你定义了一个名为myFunction的函数,那么你不能再定义一个名为myfunction的函数。

    然而,如果你希望实现一个逻辑,当调用一个不存在的函数时系统会调用对应的小写形式的函数,我们可以通过使用反射来实现。

    首先,我们需要创建一个函数调用的中间层,用于处理函数名的大小写。我们可以创建一个类,例如FunctionInvoker,在这个类中包含两个方法:invokeinvokeLowerCaseinvoke方法接受一个函数名作为参数,通过反射来调用对应的函数。invokeLowerCase方法首先将传入的函数名转换为小写,然后调用invoke方法来执行对应的函数。

    public class FunctionInvoker {
    
        public void invoke(String functionName) {
            try {
                Method method = this.getClass().getMethod(functionName);
                method.invoke(this);
            } catch (ReflectiveOperationException ex) {
                System.out.println("Function not found");
            }
        }
    
        public void invokeLowerCase(String functionName) {
            invoke(functionName.toLowerCase());
        }
    
        public void myFunction() {
            System.out.println("Calling myFunction");
        }
    
    }
    

    然后,我们可以在main方法中使用FunctionInvoker来测试调用函数:

    public static void main(String[] args) {
        FunctionInvoker invoker = new FunctionInvoker();
        invoker.invoke("myFunction");  // Output: Calling myFunction
        invoker.invokeLowerCase("myfunction");  // Output: Calling myFunction
        invoker.invokeLowerCase("nonexistent");  // Output: Function not found
    }
    

    以上代码中,我们首先创建了一个FunctionInvoker实例,然后分别调用了invokeinvokeLowerCase方法来测试函数调用。当传入的函数名与定义的函数名匹配时,对应的函数会被调用;当传入的函数名不匹配时,会输出"Function not found"。

    希望以上答案能对您有帮助。如果您有任何其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^