我正在尝试获得此功能:
Class<?> c = Class.forName(dir.substring(6).replaceAll("/", ".")
+ file.getName().replaceAll(".java", ""));
Packet packet = (Packet)c.newInstance();
对于熟悉它的任何人,上面的代码都是Java,它从目录中获取类,然后创建它的实例,这就是我在C#中要尝试做的
我已经了解到了这一点,现在我被困住了...
foreach(Type t in assembly.GetTypes())
{
if (t.BaseType == typeof(Packet))
{
基本上,我需要找到一种从Type构造类的方法,然后创建它的实例。
我试过使用激活器,如下所示:
foreach(Type t in assembly.GetTypes())
{
if (t.BaseType == typeof(Packet))
{
string namespaceName = t.Namespace;
string className = t.Name;
var myObj = Activator.CreateInstance(namespaceName, className);
但我不知道如何引用它作为一个类而不是ObjectHandle
参考方案
基本上,我需要找到一种从Type构造类的方法,然后创建它的实例。
Type
是类(或结构等)。有了合适的Type
后,可以使用各种选项对其进行实例化……例如,Activator.CreateInstance()
,或调用Type.GetConstructors()
,找到正确的构造函数,然后invoke。
所有这些方法都返回object
,因此您需要进行强制转换:
Packet packet = (Packet) Activator.CreateInstance(type);
Java:从类中查找项目名称 - java仅通过类的实例,如何使用Java反射或类似方法查找项目名称?如果不是,项目名称(我真正想要的是)可以找到程序包名称吗? 参考方案 项目只是IDE使用的简单组织工具,因此项目名称不是类或JVM中包含的信息。要获取软件包,请使用Class#getPackage()。然后,可以调用Package#getName()将包作为您在代码的包声明中看到的String来获取…
从JAVA调用方法C#.NET - java我有一个C#.NET项目中创建的dll,我想从Java程序中调用方法。我想知道是否存在实现此目标的机会,然后遇到了JNA和JNI。我应该使用哪一个?有什么建议么?我只需要在使用C#.NET编写的类中调用方法并处理Java程序的结果即可。 参考方案 这取决于您的应用程序,但是您可以将C#DLL放在服务中,例如WCF并以这种方式将功能公开给Java代码。使用ws…
java.net.URI.create异常 - javajava.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…
Java:正则表达式模式匹配器是否有大小限制? - java我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)
Java:线程池如何将线程映射到可运行对象 - java试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …