Tag: 方法 重载

方法重载时重复的方法

以下代码提供编译错误,错误“重复方法” static int test(int i){ return 1; } static String test(int i){ return “abc”; } 这是预期的,因为重载方法具有相同的签名并且仅在返回类型方面不同。 但是下面的代码编译好了警告: static int test1(List l){ return 1; } static String test1(List l){ return “abc”; } 因为,我们知道Java Generics在Erasure上运行,这意味着在字节码中,这两种方法具有完全相同的签名,并且与返回类型不同。 更令我惊讶的是,以下代码再次出现编译错误: static int test1(List l){ return 1; } static String test1(List l){ return “abc”; } 如果有重复的方法,第二个代码如何正常工作而不会给出任何编译错误?

我可以通过Java中的引用传递原始类型吗?

我想调用一个可能采用不同版本的方法,即类型为输入参数的相同方法: 布尔 字节 短 INT 长 我想这样做的方法是“重载”方法(我认为这是正确的术语?): public void getValue(byte theByte) {…} public void getValue(short theShort) {…} … etc … …但这意味着我必须通过引用传递原始类型…类似于C ++,其中方法具有外部效果,它可以在其范围之外修改变量。 有没有办法在不创建新类或使用原始类型的Object版本的情况下执行此操作? 如果没有,有关替代战略的任何建议吗? 让我知道是否应该进一步解释清除任何混淆。 UPDATE 我实际上要做的是从一组位构造基本类型。 因此,如果我正在处理方法的字节版本,我希望我的工作能够得到8位并返回字节(因为我无法通过引用传递)。 我问这个问题的原因是因为我用bit做的工作是非常重复的,我不想在不同的方法中使用相同的代码。 所以我想找到一种方法让我的ONE方法知道我正在谈论多少位…如果我正在使用一个字节,那么8位,如果我正在处理一个短的16位等等…

使用invokedynamic实现多个分派

我想知道Java7的新invokedynamic字节码指令是否可用于实现Java语言的多个调度 。 java.lang.invoke下的新API是否有助于执行此类操作? 我考虑的场景如下所示。 (这看起来像访问者设计模式的应用案例,但可能有理由认为这不是一个可行的选择。) class A {} class A1 extends A {} class A2 extends A {} class SomeHandler { private void doHandle(A1 a1) { … } private void doHandle(A2 a2) { … } private void doHandle(A a) { … } public void handle(A a) { MultipleDispatch.call(this, “doHandle”, a); } } 那么库类MultipleDispatch会做类似的事情: class MultipleDispatch […]

Java方法重载+双重调度

任何人都可以详细解释在我的测试代码段中使用Child实例时调用重载方法print(Parent parent)的原因吗? 这里涉及Java中的任何虚拟方法或方法重载/解析的特征? 有没有直接引用Java Lang Spec? 哪个术语描述了这种行为? 非常感谢。 public class InheritancePlay { public static class Parent { public void doJob(Worker worker) { System.out.println(“this is ” + this.getClass().getName()); worker.print(this); } } public static class Child extends Parent { } public static class Worker { public void print(Parent parent) { System.out.println(“Why this method resolution happens?”); } public […]