0 0

如果类里有重载或不定长度参数的方法如何进行对方法的反射?5

如果类里有重载的方法如何进行对方法的反射?

如题:
比如说:
package com.tom.blog.monicc.test.reflect

public class TestDao{
    
    public void printTest(){
        System.out.println("test");
    }

    public void printTest(String[] strings){
        System.out.println("test");
        for(String str : strings){
            System.out.println("str[]: " + str);
        }
    }
}


那么我要通过反射使用printTest(String[] strings)方法要怎样才可以,我现在是无论怎么只是找到那个无参数的方法。

还有另外的一种情况,在我们的Dao类里有很多的用了5.0以后出现的不定长度参数,像是:

   ...
    public void printTest(String... strings){
        System.out.println("test");
        for(String str : strings){
            System.out.println("str[]: " + str);
        }
    }
    ...



那么请问一下在这种情况下怎么才能得到这个方法?我用反射的话总是NoSuchMethodException。
他总找的是printTest()这个方法。

我在网上查不到相关的信息,希望有人能指点一下,谢谢!
OO 
2008年7月23日 11:28

4个答案 按时间排序 按投票排序

0 0

采纳的答案

public class Test {
	
	public void methodOne(String... args) {
		System.out.println("1");
	}
	
	public void methodOne(String arg) {
		System.out.println("2");
	}
	
	public void methodTwo(String[] args) {
		System.out.println("3");
	}

	public static void main(String[] args) throws Exception {
		Test test = new Test();

		Method method1 = Test.class.getMethod("methodOne", new Class[] { String[].class });
		method1.invoke(test, new Object[] { new String[] { "s" } });
		
		Method method2 = Test.class.getMethod("methodOne", new Class[] { String.class });
		method2.invoke(test, new Object[] {"s"});

		Method method3 = Test.class.getMethod("methodTwo", new Class[] { String[].class });
		method3.invoke(test, new Object[] { new String[] { "s" } });
	}
}

2008年7月23日 18:49
0 0

上面的代码包含了重载.

2008年7月23日 18:49
0 0

也就是: String... 其实等同于 String[]

2008年7月23日 18:47
0 0

public class Test {
	public void methodOne(String... args) {
		System.out.println("1");
	}

	public void methodTwo(String[] args) {
		System.out.println("2");
	}

	public static void main(String[] args) throws Exception {
		Test test = new Test();

		Method method2 = Test.class.getMethod("methodOne", new Class[] { String[].class });
		method2.invoke(test, new Object[] { new String[] { "s" } });

		Method method = Test.class.getMethod("methodTwo", new Class[] { String[].class });
		method.invoke(test, new Object[] { new String[] { "s" } });
	}
}

2008年7月23日 18:47

相关推荐

    java 反射得到某个方法

    如果方法有重载,我们需要提供精确的参数类型来获取正确的方法。 例如,如果我们想获取名为`myMethod`,参数类型为`String`的方法,可以这样写: ```java Method method = clazz.getMethod("myMethod", String....

    类继承方法重载

    在编程领域,类继承和方法重载是面向对象编程中的两个关键概念,它们极大地提高了代码的复用性和灵活性。在这个名为"practise"的压缩包文件中,我们可能找到一个关于这两个概念的实际应用示例。 首先,让我们深入...

    JAVA方法的定义和方法的重载Overload.docx

    方法的定义和方法的重载是 Java 编程语言的基础知识,本文将对 Java 方法的定义和方法的重载进行详细的介绍。 一、Java 方法的定义 Java 方法是解决问题的多行代码的集合,给予一个名字,以便多次使用。方法的作用...

    重载运算符,测试输入的长度能否构成一个三角形

    这里,我们可能会有一个函数或方法,它接受三个边长作为输入,然后检查是否满足任意两边之和大于第三边的三角形条件。如果满足,返回true,否则返回false。 构成三角形的条件是任意两边之和必须大于第三边。这个...

    方法重载和方法重写

    1. **范围**:方法重载发生在同一类内部,而方法重写发生在继承的上下文中,即子类对父类方法的改变。 2. **参数列表**:重载必须有不同参数列表,而重写要求参数列表完全一致。 3. **返回类型**:重载不关注返回...

    如何在c#中用虚拟的方法实现重载?其实很简单

    方法重载是指在同一类中定义多个同名方法,但这些方法的参数列表不同(包括参数的数量、类型或顺序)。编译器会根据传递给方法的参数自动选择最合适的方法版本。这使得我们可以为同一个操作提供多种不同的实现方式,...

    反射 reflect 根据方法名得到方法,并根据不同的数据类型参数和不同的返回值类型

    如果`myMethod`有多个重载版本,我们需要提供所有参数类型的Class对象来精确匹配。 对于"不同的返回值类型",Java反射API并不直接支持根据返回值类型来查找方法。通常,我们先根据方法名和参数类型找到可能匹配的...

    Java方法重载

    方法重载的要求是:在同一个类中,方法名必须相同,而参数列表不同。注意,方法的重载与返回值和访问修饰符没有关系。 方法重载的优点是可以提高代码的复用性和可读性。例如,在 driver 类中,驾驶员可以驾驶汽车、...

    JAVA中的方法重写与方法重载区别

    在方法重写中,子类可以对父类的方法进行修改或扩充,但不能修改父类的方法的参数列表。 方法重写的规则有三个: 1. 参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载。 2. 返回的类型必须一直...

    Java编程那些事儿55—方法重载和参数传递

    ### Java编程那些事儿55—方法重载和参数传递 #### 方法重载(Overloading) 在Java编程语言中,**方法重载**(Overloading)是一个非常重要的概念,它允许我们定义多个具有相同名称但参数列表不同的方法。这种方法...

    js中方法重载如何实现?以及函数的参数问题.docx

    JavaScript 作为一种动态类型语言,与静态类型的编程语言如Java或C#不同,它不支持原生的方法重载。然而,由于其灵活性,我们可以通过一些技巧来模拟实现方法重载的效果。这里我们将详细讨论如何在JavaScript中实现...

    Java方法重载的实例

    Java方法重载是面向对象编程中的一个重要概念,它允许在一个类中定义多个具有相同名称但参数列表不同的方法。这样做的好处在于,通过方法名就可以直观地理解方法的功能,而具体的执行逻辑则由传入的参数类型和数量...

    重载与覆写/重写的区别

     如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。  在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。  但有时子类并不想原封不动地继承父类的方法,...

    Java方法继承、方法重载、方法覆盖总结

    如果子类没有对父类的方法进行覆盖,则子类可以直接调用这些继承而来的方法。下面通过几个方面来详细介绍方法继承: 1. **可见性修饰符**: 当子类`SubBase`继承自父类`Base`时,父类中的所有`public`和`protected`...

    ASP.NET方法如何重载,文本文档

    在这个例子中,虽然两个`Write`方法都具有相同的名称,但是它们的参数数量不同,第一个方法有两个参数,而第二个方法有三个参数。因此,这两个方法构成了方法重载。 ##### 示例2:参数类型不同 ```csharp public ...

    java中方法重载内存分析

    在Java中,如果一个类中有两个或更多的方法拥有相同的名称,但它们的参数列表不同(参数数量、类型或者顺序不同),那么这些方法就是重载的。Java虚拟机(JVM)会根据传入参数的类型和数量来选择调用哪个重载方法,...

    C# MessageBox.Show 方法重载

    在C#编程中,`MessageBox.Show`方法是一个非常常见的用户交互工具,用于向用户显示简单的信息、警告或确认对话框。这个方法具有多种重载形式,使得开发者可以根据实际需求定制对话框的显示内容和样式。下面我们将...

    课堂笔记07(包-构造方法-方法重载-封装-方法参数的传递

    接着,方法重载(Overloading)是面向对象编程中的一个重要特性,它允许在同一个类中定义多个同名方法,但这些方法的参数列表必须不同(参数数量、类型或顺序差异)。Java虚拟机(JVM)根据传入的参数来决定调用哪个...

    Java 程序显示类中方法的重载.docx

    Java 中的方法重载是指在同一个类中可以定义多个具有相同名称的方法,但是这些方法的参数列表不同,包括参数的数量、参数的数据类型、参数的顺序等。方法重载是 Java 中的一种多态性,它允许开发者编写更加灵活和...

    对C++编译器区分重载函数无任何意义的信息是 A.参数类型B.参数个数.docx

    #### 什么是函数重载? 函数重载允许在同一个作用域中定义多个同名函数,但这些函数的参数列表必须有所不同。这使得程序设计更加灵活且易于理解,因为程序员可以使用相同的名字来表示相似功能的不同实现方式。 ####...

Global site tag (gtag.js) - Google Analytics