【问题标题】:Implementing generic method in java在java中实现泛型方法
【发布时间】:2020-06-16 09:48:01
【问题描述】:

下面的代码在我尝试访问对象的方法时出错。我在这里做错了什么。

public class Main{
public static void main(String[] args) {
    MyFirstObject myObj1 = new MyFirstObject();
    MySecondObject myObj2 = new MySecondObject();

MyGenerics mg = new MyGenerics();
System.out.println( mg.partTwo(myObj1, myObj2) );

}
}

class MyFirstObject{
    int value(){
        return 1;
    }
}
class MySecondObject{
    int value(){
        return 2;
    }
}

class MyGenerics {


   static <T,U> int partTwo (T o1, U o2) 
    { 
        System.out.println(o1.value()); 
                           return 1;
    } 
}

错误是: Main.java:31:错误:找不到符号 System.out.println(o1.value()); ^ 符号:方法值() 位置:类型 T 的变量 o1 其中 T,U 是类型变量: T 扩展了在方法 partTwo(T,U) 中声明的对象 U 扩展了在方法 partTwo(T,U) 中声明的 Object 1 个错误

【问题讨论】:

  • 需要声明类型变量的界限。
  • 该方法应该做什么以及通用参数 T 和 U 在您编写的代码中代表什么?
  • 您的 MyGenerics 类缺少类型参数 ,也需要在创建时给出。
  • 为什么类需要泛型参数?我只需要创建一个泛型方法。
  • 你需要告诉班级 T 和 U 代表哪个班级。

标签: java generics


【解决方案1】:

当你传递 T 或 U 时,java 不知道它是什么对象以及它包含什么方法,所以你需要一些规范。例如,您可以创建一个接口并在类中实现它。

例子:

public class Main {
    public static void main(String[] args) {
        MyFirstObject myObj1 = new MyFirstObject();
        MySecondObject myObj2 = new MySecondObject();

        MyGenerics mg = new MyGenerics();
        System.out.println(mg.partTwo(myObj1, myObj2));

    }
}

interface Action {
    int value();
}

class MyFirstObject implements Action {
    public int value() {
        return 1;
    }
}

class MySecondObject implements Action {
    public int value() {
        return 2;
    }
}

class MyGenerics {

    static <T extends Action, U extends Action> int partTwo(T o1, U o2) {
        System.out.println(o1.value());
        return 1;
    }
}

【讨论】:

  • 这是否也能确保它只接受实现了包含值函数的接口的对象。
猜你喜欢
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多