Java无法比较的类型错误?

时间:2017-03-30 00:26:04

标签: java

我试图分配字符串" unknown"如果条件为false,则返回模块,但它给出了一个错误,指出不兼容的类型。我创建了一个Module实例,它是一个外部类,在单独的模块类本身中具有Module名称的getter和setter。

package com.programming.data;

// it has a module attribute
public class Student
{
    private String id;
    private String name;
    private String address;
    private int age;
    private Module module;
    Module moduleObject = new Module();
    public String getId()
    {
        return this.id; 
    }
    public String getName(){
        return this.name;
    }
    public String getAddress(){
        return this.address;
    }
    public int getAge(){
        return this.age;
    }
    public Module getModule(){
        return this.module;
    }
    public void setId(String id){
        this.id =id;
    }
    public void setName(String name){
        this.name = name;
    }
    public void setAddress(String address){
        this.address = address;
    }
    public void setAge(int age){
        if(age<18){
            this.age = 18;
        }
        else{
            this.age = age;
        }
    }
    public void setModule(Module module){

        if(!module.equals("Programming 1")&&!module.equals("System   
       Environments")&&!module.equals("Flower 
       Arranging")&&!module.equals("Neutron Bomb Juggling")) {
            this.module = "unknown"; // HERE OCCURS THE ERROR
        }
        else{
            this.module = module;
        }
    }
}

public class Module {

    private String name;
    private int duration;

    public String getName(){
        return this.name;
    }

    public int getDuration(){
        return this.duration;
    }

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

    public void setDuration(int duration){
        this.duration = duration;
    }
}

2 个答案:

答案 0 :(得分:2)

Java是一种强类型语言。如果您的变量属于Module类型,则无法为其指定String(如“未知”)。

您可能希望创建一个名为“unknown”的Module实例(“Null Object Pattern”)。或者也许使用null(这可能会让你陷入所有其他类型的问题)。

类似地,你的module.equals("Flower Arranging")也不会起作用(即使它编译)。您可能希望比较名称("Flower Arranging".equals(module.getName()))。

答案 1 :(得分:0)

很明显,你正在设置一个&#34;模块&#34;键入字符串类型,显然它们不兼容,因为Java不允许这样做。尝试将其设置为null,或添加某种&#34; Status&#34;到Module类,所以你可以将它的状态设置为&#34; unknown&#34;