【问题标题】:Generics: java.lang.String cannot be applied to Student泛型:java.lang.String 不能应用于 Student
【发布时间】:2017-07-26 21:14:38
【问题描述】:

我在课堂上,我的教授说她的代码有效,没有任何问题,而且一定是我。我已经查看了她的代码并像她所说的那样逐字复制,但是我仍然收到错误:

Pair.java:28: Pair 中的 set(java.lang.String,java.lang.Double) 不能应用于 (Student,java.lang.Double)

我加粗的部分是我收到错误的部分。设置方法不正确吗?因为有错误的那一行又回到了set方法

这是她的代码:

学生.java

import java.io.*;

public class Student implements Person {
  String id;
  String name;
  int age;

  //constructor
  public Student(String i, String n, int a) {
    id = i;
    name = n;
    age = a;
  }

  public String getID() {
    return id;
  }

  public String getName() {
    return name; //from Person interface
  } 

  public int getAge() {
    return age; //from Person interface
  }

  public void setid(String i) {
    this.id = i;
  }

  public void setName(String n) {
    this.name = n;

  }

  public void setAge(int a) {
   this.age = a;
  }

  public boolean equalTo(Person other) {
    Student otherStudent = (Student) other;
    //cast Person to Student
    return (id.equals(otherStudent.getID()));
  }

  public String toString() {
    return "Student(ID: " + id + 
      ",Name: " + name +
      ", Age: " + age +")";
  }
}

Person.java

import java.io.*;

public interface Person {
  //is this the same person?
  public boolean equalTo (Person other);
  //get this persons name
  public String getName();
  //get this persons age
  public int getAge();
}

对.java

import java.io.*;

public class Pair<K, V> {

  K key;
  V value;
  public void set (K k, V v) {
    key = k;
    value = v;
  }

  public K getKey() {return key;}
  public V getValue() {return value;}
  public String toString() {
    return "[" + getKey() + "," + getValue() + "]";
  }

  public static void main (String [] args) {
    Pair<String,Integer> pair1 = 
      new Pair<String,Integer>();
    pair1.set(new String("height"),new
                Integer(36));
    System.out.println(pair1);
    Pair<String,Double> pair2 = 
      new Pair<String,Double>();

    //class Student defined earlier
    **pair2.set(new Student("s0111","Ann",19),**
              new Double(8.5));
    System.out.println(pair2);
  }
}

【问题讨论】:

  • 应该是Pair&lt;Student,Double&gt; pair2 = new Pair&lt;Student,Double&gt;();

标签: java generics


【解决方案1】:

对于实例化:

Pair<String,Double> pair2 = new Pair<String,Double>();

您的set() 方法签名等效于:set(String, Double)。你在下面的调用中传递了一个Student 引用,这是行不通的,因为Student 不是String

pair2.set(new Student("s0111","Ann",19), new Double(8.5));

为避免此问题,请将pair2 的声明更改为:

Pair<Student,Double> pair2 = new Pair<Student,Double>();

【讨论】:

    【解决方案2】:

    这个错误是不言自明的。 pair2 被定义为Pair&lt;String, Double&gt;。您正在尝试设置Student, Double。那是行不通的。

    【讨论】:

      【解决方案3】:
      Pair<String,Double> pair2 = new Pair<String,Double>();
      

      应该是:

      Pair<Student,Double> pair2 = new Pair<Student,Double>();
      

      【讨论】:

        【解决方案4】:

        从您的代码 pair2 定义为类型 Pair&lt;String,Double&gt;,即 pair2 set() 方法期望 StringDouble 作为参数,但您传递 StudentDouble
        所以

        Pair<String,Double> pair2 = new Pair<String,Double>();  
        

        应该是

        Pair<Student,Double> pair2 = new Pair<Student,Double>();
        

        【讨论】:

          猜你喜欢
          • 2014-11-23
          • 1970-01-01
          • 2018-07-17
          • 2021-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多