Tag: 重载

使用varargs重载Java 7

可能重复: varargs和重载的错误? 任何人都可以解释我这是如何工作的: class Vararg { static void vararg(int… x) { System.out.println(“Integer…”); } static void vararg(long… x) { System.out.println(“long…”); } public static void main(String [] args) { int s = 0; vararg(s,s); } } 获取编译时错误 class Vararg { static void vararg(Integer… x) { System.out.println(“Integer…”); } static void vararg(long… x) { System.out.println(“long…”); } public static void […]

java中方法重载的行为

我尝试了以下代码 public class HelloWorld { public void printData(Test t) { System.out.println(“Reached 1”); } public void printData(newTest t) { System.out.println(“Reached 2”); } public void printData(newTest1 t) { System.out.println(“Reached 3”); } public static void main(String args[]) { Test t1 = new Test(); HelloWorld h = new HelloWorld(); h.printData(t1); NewTest t2 = new NewTest(); h.printData(t2); NewTest1 t3 = […]

使用变量args重载

class OverloadingVarargs2 { static void f(float i, Character… args) { System.out.println(“first”); System.out.println(i); } static void f(Character… args) { System.out.println(“second”); } static void test() { f(1, ‘a’); f(‘b’, ‘c’); // the method f is ambiguous } } 这段代码无法编译,编译器说f是不明确的。 但我认为第二种方法可以匹配f(‘b’, ‘c’); 有什么问题?

使用原始类型和包装类的varargs重载时为什么会出现模糊错误?

我不明白为什么在这里的情况1,它没有给出编译错误,相反在情况2(varargs),它给出了编译错误。 任何人都可以详细说明编译器在这两种情况下的差异吗? 我经历了很多关于它的post,但还不能理解它。 情况1 public class Test { public void display(int a) { System.out.println(“1”); } public void display(Integer a) { System.out.println(“2”); } public static void main(String[] args) { new Test().display(0); } } 输出为: 1 案例#2 public class Test { public void display(int… a) { System.out.println(“1”); } public void display(Integer… a) { System.out.println(“2”); } public static […]

执行map-reduce操作的通用方法。 (爪哇-8)

如何在Java 8中使用generics参数重载函数? public class Test { List list = new ArrayList(); public int sum(Function function) { return list.stream().map(function).reduce(Integer::sum).get(); } public double sum(Function function) { return list.stream().map(function).reduce(Double::sum).get(); } } 错误:java:name clash:sum(java.util.function.Function )和sum(java.util.function.Function )具有相同的擦除

java中的重载方法优先级

我知道这个问题多次讨论过,但我还是不明白。 研究这段代码: public class Main { public static void var(Integer x, int y) { System.out.println(“Integer int”); } public static void var(int… x) { System.out.println(“int… x”); } public static void var(Integer… x) { System.out.println(“Integer…”); } public static void main(String… args) { byte i = 0; Integer i2 = 127; var(i, i2); } } 在我的大脑遵循规则: 加宽 拳击 […]

关于Java重载和动态绑定的问题

在下面的代码中,第一个和第二个打印语句如何打印出SubObj? 顶部和子指向同一个Sub类吗? class Top { public String f(Object o) {return “Top”;} } class Sub extends Top { public String f(String s) {return “Sub”;} public String f(Object o) {return “SubObj”;} } public class Test { public static void main(String[] args) { Sub sub = new Sub(); Top top = sub; String str = “Something”; Object obj […]

Java重载vs重写

嗨,我只是想确保我有正确的这些概念。 在java中重载意味着您​​可以使用具有不同数量的参数或不同数据类型的构造函数或方法。 即 public void setValue(){ this.value = 0; } public void setValue(int v){ this.value = v; } 这个方法怎么样? 它是否仍会被视为重载,因为它返回不同的数据类型? public int setValue(){ return this.value; } 第二个问题是:什么是重写java? 它与inheritance有关吗? 我们有以下内容: public class Vehicle{ double basePrice = 20000; //constructor defined public double getPrice(){ return basePrice; } } public class Truck extends Vehicle{ double truckPrice = 14000; //constructor […]

接受两种不同类型作为参数的方法

我正在编写一个方法,它应该接受两个类型之一的对象作为其参数,这两个类型不共享除Object之外的父类型。 例如,类型是梦想和大蒜。 你可以做dreams.crush()和garlic.crush() 。 我想有一个方法utterlyDestroy(parameter) ,它接受Dreams和Garlic作为它的参数。 utterlyDestroy(parameter) { parameter.crush() } Garlic和dream都是某些库的一部分,所以让它们实现一个接口ICrushable(这样我就可以编写utterlyDestroy(ICrushable parameter) )不是一个选项。 我的方法体很长,所以重载就意味着重复代码。 丑陋。 我相信我可以使用reflection并做一些类黑客攻击。 丑陋。 我尝试使用generics,但显然我不能写类似的东西 utterlyDestroy( parameter) 是否有可能将大蒜强加给梦想? utterlyDestroy(Object parameter) { ((Dreams)parameter).crush() } 但这仍然是丑陋的。 我的其他选择是什么?处理这种情况的首选方法是什么?

使用基元及其包装器重载的方法

我正在尝试制定下面方案中使用的规则。 请解释为什么我得到2个不同的输出。 场景1输出: 我是一个对象。 class Test { public static void main (String[] args) { Test t = new Test(); byte b_var = 10; t.do_the_test(b_var); } public void do_the_test(Character c) { System.out.println(“I am a character.”); } public void do_the_test(Integer i) { System.out.println(“I am an integer.”); } public void do_the_test(Object obj) { System.out.println(“I am an object.”); } […]