【发布时间】:2017-09-27 03:00:45
【问题描述】:
我正要在 Java 中尝试一些东西并遇到以下问题,在我解释这里的所有内容之前都是我的代码:
主类:
package com.company;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
// write your code here
HashMap lol = new HashMap();
Student david = new Student("David", "Shite");
lol.put("First:", david);
System.out.println("HashMap key: " + lol.keySet());
System.out.println("Value of the key: " + lol.get("First:"));
System.out.println("Student's first and last name: " +
((Student)lol.get("First:")).getFirstName());
}
}
学生班:
class Student {
private String firstName;
private String lastName;
public Student(String firstName, String lastName){
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName(){
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
}
我的问题是关于这行代码:
System.out.println("Student's first and last name: " +
((Student)lol.get("First:")).getFirstName());
这可行,但一开始我尝试过:
System.out.println("Student's first and last name: " +
(lol.get("First:").getFirstName()));
上面的代码不起作用,因为它 (IntelliJ) 无法识别方法“getFirstName()”,并出现以下错误:
java: 找不到符号 符号:方法 getFirstName() 位置:类 java.lang.Object
之后我尝试强制转换它并且它会工作,但我不确定为什么当放入 HashMap 的值是 Student 类型的对象并且 getFirstName() 是有效的 getter 方法时,如果不强制转换它就不能工作在提到的类中。
我也尝试了这个以确保它仍然是 Student 类的实例并且没有隐式转换为 Object 类:
System.out.println(lol.get("First:") instanceof Student);
和
System.out.println(lol.get("First:").getClass());
第一条语句的输出为真,第二条语句的输出为“class com.company.Student”,那么有人可以解释为什么它无法识别 getter 方法调用而不将返回值显式转换为 Student 类吗?
【问题讨论】:
标签: java object hashmap return