有一些论据说(String a, Treeset b, Set c)
我试着通过arguments[i].getClass();
以上的论证来获得课程。
是不是可以获得接口<Set>
的类。
例如:
Class[] argumentTypes = new Class [arguments.length];
for (int i = 0 ; i < arguments.length ; i++)
{
argumentTypes[i] = arguments[i].getClass();
}
答案 0 :(得分:2)
您给出的代码将找到参数的类(即提供给方法的值) - 但那些永远不会是接口;他们将永远是具体的实施。 (你永远不能传递“只是一个集合” - 始终是对象的引用,该对象是接口的实现的实例,或者是空引用。)
听起来你想要参数的类型 - 你必须通过反射得到它,找到Method
,然后从getParameterTypes
获取参数{ {3}}。但鉴于你在方法中,你已经知道参数类型,因为它们位于方法的顶部...我不确定找到“当前的最佳方法”执行“方法,如果这就是你所追求的。
如果您只是尝试获取与Set
相关联的课程,您当然可以使用Set.class
。但同样,你要做的事情还不是很清楚。
编辑:好的,从您的评论来看,您尝试做的事情存在一些逻辑问题。在一般情况下,从参数的值到调用哪个方法是不可能的,因为你丢失了信息。考虑一下,例如:
void foo(String x) {}
void foo(Object y) {}
foo("hello"); // Calls first method
foo((Object) "hello"); // Calls second method
此处参数 values 是相同的 - 但表达式具有不同的类型。
您可以找到参数值有效的所有方法 - 使用Class.isAssignableFrom
按类型擦除丢失的模数通用信息。这对你有帮助吗?
请注意,您还需要仔细考虑如何处理null参数值,这显然对任何引用类型参数有效...
答案 1 :(得分:0)
答案 2 :(得分:0)
您将获得呼叫者提供的课程。
我的意思是,在下面的课程中你会得到HashSet。
Set set=new HashSet();
System.out.println(set.getClass());
答案 3 :(得分:0)
您可以通过以下两种方式执行此操作
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