更改java以支持静态和动态类型是否有用?

时间:2020-03-06 14:24:33  来源:igfitidea点击:

如果Java同时允许静态和动态类型,该怎么办?这可能会两全其美。 IE。:

String str = "Hello";
var temp = str;
temp = 10;
temp = temp * 5;
  • 那有可能吗?
  • 那会有益吗?
  • 目前是否有任何语言都支持这两种语言,效果如何?

这是一个更好的示例(无法使用泛型,但程序确实知道类型):

var username = HttpServletRequest.getSession().getAttribute("username");//Returns a String
if(username.length() == 0) {
    //Error
}

解决方案

我们能否解释一下示例与

String str = "Hello";
Object temp = str;
temp = 10;

动态类型变量只是具有Universal类型,因此其他所有类型都是Universal的子类型。所有类型都从此类通用类型继承的任何语言(例如Java取模未装箱的值)都已经具有此功能。至于有用性取决于我们在做什么。我更喜欢一个完全静态的类型系统,在该系统中可以轻松创建安全的带标记的联合,因此我可以将所需的任何值放入变量中,但要比Universal更具控制性。

是的,这将是有益的,但对于我们所显示的示例而言却不是。我认为这样会更好

public void f(var o)
{
   o.method();
}

而且我可以使用称为method()的方法对任何对象调用f,而无需引入接口。非常适合有约定但不一定有接口的地方。对于与具有动态调度的语言进行互操作也很有用。

遵循以我们描述的方式使用的" var"关键字,但最终它是基于类型检查建议将要输入的值的类型的强类型变量。

  • 那有可能吗?几乎不。 Java是一种类似于C的语言,最初被设计为仅支持静态类型。向Java引入此功能将花费很多时间,我认为开发人员不会花时间在此上。
  • 那会有益吗?不会。Java是一种传统语言,静态类型是其基本原理之一或者它的体系结构。实际上,静态类型在编程中仍然更加流行(我们可以在此处查看有趣的统计信息)。
  • 目前是否有任何语言支持它,效果如何?好吧,有很多语言支持动态类型,但是我想你知道这一点。如果语言支持动态类型化,则没有必要向该语言引入静态类型化...

同样,我们可以在示例中显示的功能可以通过静态类型实现。 jon用Java中的" Object"类为我们提供了一个示例。我们可以在C / C ++中对void *进行类似的处理。尽管如此,这仍不能使语言成为动态类型。

@Lou:这仅仅是语法糖:

void doSth(Object foo) throws Exception{
        Method m = foo.getClass().getMethod("foo", String.class);
        m.invoke(foo, "baz");       
}

我确实使用反射,但是我更喜欢它很丑陋,因此不会被滥用。