是否可以获取接口的类<set> </set>

时间:2012-03-30 05:26:02

标签: java

有一些论据说(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();
}

4 个答案:

答案 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