Java Map 奇怪的行为

用户7451361

我正准备在 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 类吗?

陀螺坦克

您正在使用原始 HashMap 类,它将键和值视为对象。为了使其识别学生,您应该使用

HashMap<String, Student> lol = new HashMap<>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章