我所做的就是了解Generics在Java中的工作原理.我写了以下代码:
public class Test {
public static void main(String... args) throws Exception{
Foo o = new Foo<Integer>(new Integer(5));
o.fun();
}
}
class Foo<T> {
private T t;
public Foo(T t) throws InstantiationException, IllegalAccessException{
System.out.println("1. T is "+t.getClass());
this.t = (T)"test";
System.out.println("2. T is "+t.getClass());
}
void fun(){
System.out.println("3. T is "+t.getClass()+" t = "+t);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
1. T is class java.lang.Integer
2. T is Still class java.lang.Integer
3. T is class java.lang.String t = test
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么这会将Class从Integer更改为String而不显示错误/异常.
第二件事是,当我写信t = …
我有两个相似(不完全相同)的dll,其中一个实际上是另一个的一部分.我试图看看是否仍然存在兼容性(即,如果较小的仍然完全包含在较大的内容中).
我这样做是通过迭代较小的dll中的所有类型并检查它们中的每个方法是否也存在(名称和参数列表)在较大的dll中.
问题是Assembly.GetMethods()返回方法和属性getter/setter,我猜,是的,是一种方法,但在这种情况下这对我不利.
所以,我的问题是,如何判断MethodInfo对象是存储属性还是实际方法?