我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要).他们必须为某些类创建构造函数,并为它们添加一些方法.后来,通过我提供的测试功能,他们将检查它们是否正常.
我想做的是,通过反射,创建一个我想要测试的类的新实例.问题是,有时候,没有默认的构造函数.我不关心这个,我想创建一个实例并自己初始化实例变量.有没有办法做到这一点?我很抱歉,如果之前有人问过,但我找不到任何答案.
提前致谢.
我想知道是否有任何额外的优化我可以实现以提高Java中反射调用的速度.并不是说性能是令人望而却步的,但是我在考虑库中的某些代码时得到了一些我正在编写的代码在某个地方以紧密的方式实现.
考虑一种反射性调用的实用方法:
public static Object invoke(Object targetObject, String methodName, Object[] arguments, Class<?>[] signature)
Run Code Online (Sandbox Code Playgroud)
基本操作是
return method.invoke(targetObject, arguments);
Run Code Online (Sandbox Code Playgroud)
作为性能优化,我使用目标对象的类,方法名称和签名(其代码可能使用某些改进)的哈希来缓存方法,但除此之外,还有什么我可以做的吗?我听说过InvokeDynamic的一些早期实现的参考听起来很有希望,但我只是假设它们可能还不适用,并且我打算使用自己的字节代码操作,因为我希望保持实用程序简单(但速度快).
干杯.
考虑我有以下枚举类,
public enum Sample {
READ,
WRITE
}
Run Code Online (Sandbox Code Playgroud)
在下面的课程中我试图测试枚举类,
public class SampleTest {
public static void main(String[] args) {
testEnumSample(Sample.READ);
}
public static void testEnumSample(Sample sample) {
System.out.println(sample);
}
}
Run Code Online (Sandbox Code Playgroud)
在这里我指定Sample.READ然后将它作为参数传递给方法testEnumSample.相反,如果我们想要实例化枚举类并将其作为参数传递给我们需要做什么?
我有许多实现相同接口的类.所有这些类的对象必须在主类中实例化.我试图以一种优雅的方式完成这件事(我想通过枚举).示例代码: -
public interface Intr {
//some methods
}
public class C1 implements Intr {
// some implementations
}
public class C2 implements Intr {
// some implementations
}
...
public class Ck implements Intr {
// some implementations
}
public class MainClass {
enum ModulesEnum {
//Some code here to return objects of C1 to Ck
FIRST {return new C1()},
SECOND {return new C2()},
...
KTH {return new Ck()};
}
}
Run Code Online (Sandbox Code Playgroud)
现在在上面的例子中,我可以通过一些优雅的方式获得C1类到Ck类的新对象的实例.或者也可以理解任何其他更好的机制而不是枚举.
java ×4
enums ×2
reflection ×2
constructor ×1
instance ×1
new-operator ×1
object ×1
performance ×1