更改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"); }
我确实使用反射,但是我更喜欢它很丑陋,因此不会被滥用。