我已经看到两者互换使用,但他们真的是一样的意思吗?根据我的理解,Polymorphism延伸了这样一个事实:你可以通过子类的实例交换类的实例,而Late Binding意味着当你调用实例的方法时,类型决定调用哪个方法(子类/超类) .
关联名称太多:早期和晚期绑定,静态和动态调度,运行时与编译时多态等等,我不明白其中的区别.
我找到了明确的解释,但这是正确的吗?我会解释JustinC:
绑定:是确定变量的类型(对象?).如果它在编译时完成,它的早期绑定.如果它是在运行时完成的,那就是后期绑定.
Dispatch:确定哪个方法与方法调用匹配.Static Dispatch是编译时的计算方法,而动态调度是在运行时执行的.
绑定是否将原始值和引用变量分别与原始值和对象进行匹配?
编辑:请给我一些明确的参考资料,以便我可以阅读更多相关信息.
java late-binding dynamic-dispatch early-binding static-dispatch
在学习Java教程时,Reflection和Late Binding让我很困惑.在一些教程中,他们写过它们都是相同的,并且Reflection和Late Binding之间没有任何区别.但其他教程表示存在差异.
我很困惑,所以有人可以解释一下Java中的Reflection和Late Binding是什么,如果可行的话,请给我一些真实世界的例子.
谢谢..
我正在尝试构建一个使用System.ComponentModel.ISynchronizeInvoke的对象,该对象具有以下方法:(其中包括)
public object Invoke(Delegate method, object[] args)
Run Code Online (Sandbox Code Playgroud)
使用给定参数调用方法的最佳方法是什么?我可以用:
public object Invoke(Delegate method, object[] args)
{
return method.DynamicInvoke(args);
}
Run Code Online (Sandbox Code Playgroud)
但这是后期限制.我的直觉是,这是调用方法的唯一方法..任何想法?
是否有可能获得PHP文件的位置,在运行时进行评估?我正在寻找类似于魔术常量的东西__DIR__,但在运行时进行评估,作为后期绑定.类似的差异self和static:
__DIR__ ~ self
??? ~ static
Run Code Online (Sandbox Code Playgroud)
我的目标是在抽象类中定义一个方法,使用__DIR__它来分别为每个继承类评估.例:
abstract class Parent {
protected function getDir() {
// return __DIR__; // does not work
return <<I need this>>; //
}
}
class Heir extends Parent {
public function doSomething() {
$heirDirectory = $this->getDir();
doStuff($heirDirectory);
}
}
Run Code Online (Sandbox Code Playgroud)
显然,只有当出现此问题Parent,并Heir在不同的目录.请考虑到这一点.而且,getDir在各种继承人类中反复定义似乎并不是选项,这就是我们继承的原因......
我目前正在编写一个帮助库,通过Software Toolbox的TopServer连接到车间PLC .
TopServer库有x86和x64架构的单独版本,我想在运行时使用基于调用代码的CPU架构的后期绑定来加载适当的版本.两个库中的方法具有相同的签名.
我可以使用反射来使用下面的代码加载相关对象,但我想知道在调用代码中使用此实例的最佳方法是什么.
public class LateBinding
{
public static T GetInstance<T>(string dllPath, string fullyQualifiedClassName) where T : class
{
Assembly assembly = System.Reflection.Assembly.LoadFile(dllPath);
Type t = assembly.GetType(fullyQualifiedClassName);
return (T)Activator.CreateInstance(t);
}
}
Run Code Online (Sandbox Code Playgroud)
由于我是后期绑定,我没有获得运行前的类型,所以认为创建基于库方法签名的接口将是实现这两个版本的好方法.
有没有人对这种方法或其他方法的建议有看法?
假设我知道Color对象的属性返回一个如下所示的枚举:
enum ColorEnum {
Red,
Green,
Blue
};
Run Code Online (Sandbox Code Playgroud)
我想检查一个未知类型的特定对象(我知道有Color属性)已Color设置为Red.如果我知道对象类型,这就是我要做的事情:
ObjectType thatObject = obtainThatObject();
if( thatObject.Color == ColorEnum.Red ) {
//blah
}
Run Code Online (Sandbox Code Playgroud)
问题是我没有对程序集的引用,ColorEnum也不知道对象类型.
所以我有以下设置:
dynamic thatObject = obtainThatObject();
Run Code Online (Sandbox Code Playgroud)
而我无法施放,因为我不知道对象类型(和枚举类型).我应该怎么检查Color?
if( thatObject.Color.ToString() == "Red" ) {
//blah
}
Run Code Online (Sandbox Code Playgroud)
确实有效,但它看起来像我在"每日WTF"中看到的货物崇拜代码中最糟糕的例子.
我该如何正确检查?
我今天读了一下spliterators并实现了一个使用Spliterators.spliteratorUnknownSize(iterator(), Spliterator.NONNULL).根据spliteratorUnknownSize()文件
[结果]分裂器不是后期绑定的
作为分裂者的新手,我想知道为什么会这样.如果我确保iterator()后期绑定,那么得到的分裂器也应该是,不是吗? spliteratorUnknownSize()仅仅创建一个IteratorSpliterator不与元素源绑定的东西.
也就是说,我很想理解为什么得到的分裂器没有后期绑定.谢谢.
我在接受采访时被问到这个问题.
就我的知识而言,后期绑定是在运行时动态识别符号.如果我错了,请纠正我.
我被问到一个问题,比如我们在c ++中使用后期绑定时会遇到的问题是什么.我实际上是出于我自己的想法.
请你分享一下你职业生涯中可能遇到的问题.
谢谢.
我今天参加 Java 考试,考官问我是否可以提供在 Spring Boot 项目中使用多态性的示例。
由于我一开始想不出任何东西,他指出我在模型中重写了toString() ,这是动态/运行时多态性。
但是,我不确定我是否理解他的观点,因为根据我的理解,当我们有一个指向子类对象的父类引用变量(关注动态多态性)时,行为被认为是多态的。
然后在运行时,获取父类变量指向的实际对象并调用其方法,如此处很好地解释了。
但是,我在项目中没有使用向上转换(即使用 Object 类变量初始化 POJO 类)。
因此,我的问题是 -尽管父类(Object)从未用作引用变量,但重写 toString() 是否被视为多态?
我在 Stackoverflow 上找到的所有运行时多态性示例(包括此处的示例和带有toString 的示例)都说明了一种情况,即我们有一个父类变量指向子类对象,例如:
Object object = new User("petar");
String name = object.toString(); // assign to variable for clarity`s sake
System.out.println(name);
// prints petar
Run Code Online (Sandbox Code Playgroud)
我的用户类别是:
public class User {
String name;
public User(String name) {
this.name = name;
}
public String toString() {
return name;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在我的项目中,我只是使用自己的引用变量创建用户和其他 POJO 类,例如:
User user = …Run Code Online (Sandbox Code Playgroud) late-binding ×10
java ×4
c# ×3
.net ×2
dynamic ×2
polymorphism ×2
reflection ×2
binding ×1
c++ ×1
delegates ×1
dir ×1
enums ×1
inheritance ×1
invoke ×1
oop ×1
overriding ×1
php ×1
spliterator ×1
upcasting ×1