Java 是否可以获取接口的类<;设置>;

Java 是否可以获取接口的类<;设置>;,java,Java,我有一些参数说(字符串a、树集b、集c) 我尝试通过参数[I].getClass()获取类。 是否可以获取接口的类 例如: Class[] argumentTypes = new Class [arguments.length]; for (int i = 0 ; i < arguments.length ; i++) { argumentTypes[i] = arguments[i].getClass(); } void foo(String x) {} void foo(Ob

我有一些参数说
(字符串a、树集b、集c)

我尝试通过
参数[I].getClass()获取类
是否可以获取接口的类

例如:

Class[] argumentTypes = new Class [arguments.length];
for (int i = 0 ; i < arguments.length ; i++)
{
    argumentTypes[i] = arguments[i].getClass();
}
void foo(String x) {}
void foo(Object y) {}

foo("hello"); // Calls first method
foo((Object) "hello"); // Calls second method
Class[]argumentTypes=新类[arguments.length];
for(int i=0;i
您可以使用()

您给出的代码将找到参数的类(即提供给方法的值),但这些永远不能是接口;它们永远是具体的实现。(您永远不能传递“仅一个集合”-始终是对作为接口实现实例的对象的引用,或空引用。)

这听起来像是你想要参数的类型——如果你必须的话,你可以通过反射得到,找到参数,然后从中得到参数。但是如果您在方法中,您已经知道参数类型,因为它们位于方法的顶部。。。我不确定找到“当前正在执行的”方法的最佳方式,如果这是您想要的

如果您只是试图获取与
Set
关联的类,当然可以使用
Set.class
。但再一次,你到底想做什么还不清楚

编辑:好的,从你的评论来看,你试图做的事情存在一些逻辑问题。在一般情况下,从参数的值转到调用哪个方法是不可能的,因为您已经丢失了信息。考虑这一点,例如:

Class[] argumentTypes = new Class [arguments.length];
for (int i = 0 ; i < arguments.length ; i++)
{
    argumentTypes[i] = arguments[i].getClass();
}
void foo(String x) {}
void foo(Object y) {}

foo("hello"); // Calls first method
foo((Object) "hello"); // Calls second method
这里的参数值是相同的,但表达式的类型不同

您可以使用
Class.isAssignableFrom
找到对参数值有效的所有方法(通过类型擦除丢失的模通用信息)。这对你有帮助吗


注意,您还需要仔细考虑如何处理空参数值,这显然对任何引用类型参数都是有效的…

您将获得调用方提供的类

我的意思是,在下面的课堂上你会得到HashSet

Set set=new HashSet();
System.out.println(set.getClass());

您可以通过下面给出的两种方法来实现这一点

Set s = new //any class that implements it for example HashSet or TreeSet etc.;
s.getClass().getName(); //This will return the name of the subclass which is refered by s.
或者如果用其他方式可以做到的话

Set s = null;
s.getClass();//This causes NullPointer Exception

在堆栈溢出上格式化代码时,请使用空格而不是制表符。谢谢您的回答。。。实际上,我正在使用这些类并尝试查找和调用声明的方法..比如..methodinvokeMethod=delegateClass.getDeclaredMethod(methodID,argumentTypes);returnObj=invokeMethod.invoke(delegateObj,参数);嗨,朋友,这是反问题。。。。正如我在代表课上已经说过的,有getDeclaredMethod。。。方法invokeMethod=delegateClass.getDeclaredMethod(方法ID,ArgumentType);所以只要结合我的两个代码。。并告诉我如何找到其中一个参数作为接口的方法。。不class@Meeran例如你没有领会我的意思。无法从参数值获取参数表达式的类型。请仔细阅读我的答案。假设您被命名为“foo”和一个
字符串
引用值。我提出的两种方法都是有效的,那么你会问哪一种呢?第二种方法,考虑我有一个方法——公共无效查找方法(字符串A、集合B、哈什集C)……所以,你能告诉我如何将参数类型发送到委托类中的方法来映射确切的方法吗?方法:(methodID,argumentTypes);@Meeran:第二个?即使值是字符串?如果它刚刚被称为
foo(“hello”)呢
?我仍然认为你没有领会我回答的全部要点。请仔细阅读。如果你能在问题中提供更多的上下文,包括如何调用你的方法,这也会有很大帮助。请看-你在问一个清楚的问题上付出的努力越多,人们就越有可能帮助你。这意味着.getClass()返回HashSet或Treeset..是否有任何方法可以返回这样的集合…我的意思是像接口一样,实际上我不确定,但我认为没有任何方法可以返回这样的集合。