在运行此代码时,我在评论的行上收到错误。所以请帮我解决一下我们如何使用java泛型重载函数的问题。
public class Main
{
public static void main(String... args)
{
Main.<Integer>print();
Main.<Short>print();// error
Main.<Byte>print();// error
Main.<Void>print();//error
}
public static <T extends Integer> int print()
{
System.out.println("here - Integer");
return 0;
}
public static <T extends Short> short print() //error
{
System.out.println("here - Short");
return 0;
}
public static <T extends Byte> byte print() //error
{
System.out.println("here - Byte");
return 0;
}
public static <T extends Void> void print() //error
{
System.out.println("here - Void");
}
}
答案 0 :(得分:4)
尽管具有泛型类型参数,但这些方法并不是通用的。它们的签名也是一样的,java不能根据返回值区分函数。
你可能想要的是
public static <T> void print(T t) {
System.out.println(t.getClass());
}
根据我的理解,它与您尝试实现的目标最接近。
另请查看oracle的generics documentation以了解泛型
答案 1 :(得分:1)
Java编译无法确定要调用的方法。因为返回类型不足以让编译决定调用谁。 带参数类型的重载功能。
检查以下代码:
public class Main
{
public static void main(String... args)
{
Main.print();
Main.print(1);// int
short s = 5;
Main.print(s);// error
byte b = 57;
Main.print(b);//error
}
public static int print(int x)
{
System.out.println("here - Integer :" + x);
return 0;
}
public static short print(short y)
{
System.out.println("here - Short :" + y);
return 0;
}
public static byte print(byte b)
{
System.out.println("here - Byte :" + b);
return 0;
}
public static void print()
{
System.out.println("here - Void");
}
}
输出:
here - Void
here - Integer :1
here - Short :5
here - Byte :57
标记它^如果它对你有帮助......
谢谢,
拉夫
答案 2 :(得分:0)
您使用的代码错误 -
这篇文章很有用 http://javarevisited.blogspot.com/2011/09/generics-java-example-tutorial.html
一般来说,泛型只能在编译阶段工作而不是在运行时 - 所以你不能指望在这种情况下的polimorphism行为
答案 3 :(得分:0)
您的代码根本不需要泛型。从您的示例代码派生出来,您应该以这种方式重构它:
public static void main(String... args) {
printInteger();
printShort();
printByte();
print();
}
public static int printInteger() {
System.out.println("here - Integer");
return 0;
}
public static short printShort() {
System.out.println("here - Short");
return 0;
}
public static byte printByte() {
System.out.println("here - Byte");
return 0;
}
public static void print() {
System.out.println("here - Void");
}
但为什么你一直都会回归0
?如果要打印传递给print方法的值,请改为:
public static void main(String... args) {
int i = 42;
short s = 42;
byte b = 42;
print(i);
print(s);
print(b);
print();
}
public static void print(int value) {
System.out.println("here - Integer: " + value);
}
public static void print(short value) {
System.out.println("here - Short: " + value);
}
public static void print(byte value) {
System.out.println("here - Byte: " + value);
}
public static void print() {
System.out.println("here - Void");
}