当前位置: 首页 > 面试题库 >

Java是否等效于C#动态类类型?

陈志
2023-03-14
问题内容

我来自c#领域。

在C#中,我可以使用动态类http://msdn.microsoft.com/zh-
cn/library/dd264741.aspx

这使我不必使用模板/泛型类,而可以针对certian情况获得类似的感觉。

不幸的是,“动态”和“ java”关键字在动态架构上出现了许多不相关的信息,因此我在互联网搜索中一直不成功。

我在javaFX中涉猎了一点,并且有一个var类型,它似乎与c#的dynamic具有相同的用法。但是,它似乎在Java中不可用。

谢谢,斯蒂芬妮


问题答案:

Java不支持动态类型,但是您可以使用Java中的动态代理来模拟类似的东西。首先,您需要声明一个接口,其中包含要在对象上调用的操作:

public interface MyOps {
  void foo();
  void boo();
}

然后在myObjectInstance上创建用于动态调用的代理:

MyOps p = (MyOps) Proxy.newProxyInstance(getClass().getClassLoader(), //
    new Class<?>[] { MyOps.class }, //
    new MyHandler(myObject));
p.foo();
p.boo();

MyHandler的声明如下:

public class MyHandler implements InvocationHandler {
  private final Object o;

  public MyHandler(Object o) {
    this.o = o;
  }

  public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
    Method method = o.getClass().getMethod(m.getName(), m.getParameterTypes());
    return method.invoke(o, args);
  }
}

因此,如果myObject具有方法foo()和boo(),则将调用它们,否则,您将获得RuntimeException。

还有许多可以在JVM中支持动态类型的语言,例如Scala,Groovy,JRuby,BeanShell,JavaScript / Rhino等。Java
7中将对JVM进行一些更改,以支持本机动态分派,因此这些语言的性能可能会更好,但是这种功能不会在静态类型的Java语言中直接公开。



 类似资料:
  • 问题内容: 我将Java转换为C#,并具有以下代码(请参阅JavaContext中有关其使用的讨论。一种方法可能是创建一个单独的文件/类,但是是否有C#idom保留了Java代码中的意图? 问题答案: 看看这个 http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx 我正在专门看 换句话说,Java内部类是C#无法使用的语法

  • 问题内容: 我的要求是拥有一个线程,该线程可以维护BlackBerry设备与服务器之间的套接字连接并交换命令,类似于请求和响应。 我的问题是,我需要这个线程在后台运行 所有的时间 ,并保持提供给用户的UI。因此,当服务器发出命令时,此线程将对其进行解析并更新UI,并且如果BlackBerry用户发出了操作,则该线程会将其发送到服务器,然后服务器将对其进行处理。 我在Android中使用开发了相同的

  • 问题内容: 我知道我们可以使用Java中的方法通过指定其位置来获取字符串中的单个字符。C#中有等效的方法吗? 问题答案: 您可以像数组一样索引C#中的字符串,然后在该索引处获取字符。 例: 在Java中,您会说 在C#中,您会说

  • 本文向大家介绍C#是否等效于Java的Thread.setDaemon?,包括了C#是否等效于Java的Thread.setDaemon?的使用技巧和注意事项,需要的朋友参考一下 与Java的Thread.setDaemon等效的C#是前台线程和后台线程的概念。 当前台线程关闭时,后台线程将终止。前台线程继续运行,直到最后一个前台线程终止。 用于后台线程的属性是IsBackground,该属性获取

  • 问题内容: 在JavaScript中: C#应用程序是否等效?为了转义HTML字符,我使用了: 但是我不确定如何将匹配项转换为JS使用的正确十六进制格式。例如此代码: 返回“ 的,而不是它看起来像我需要了分割字符串为字节或东西。 编辑:这是一个Windows应用程序中,唯一可用的项目有:,,和。 问题答案: 或者是转义旨在成为URL一部分的字符串的正确方法。 以字符串为例: -> -> ->也编码

  • 问题内容: 是否有与C ++等效的Java Map keySet()? Java 方法返回“此映射中包含的键的设置视图”。 问题答案: 也许以下可能有用: 使用STL兼容序列(例如std :: vector,std :: deque或std :: list)的 make_key_set 函数的重载可以如下所示: