为什么静态字段的getter方法不能是静态的,以便字段可见?

dgsult0t  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(256)

我用的是Spring Boot和百里香。我想知道,如果静态字段的getter方法本身是静态的(不管setter是否是静态的),为什么会出现以下错误:
原因:org.springframework.beans.notreadablepropertyexception:bean类[rs.co.ucenikbean]的无效属性“rb”:bean属性“rb”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配?
字段是静态的,只有getter方法不是静态的,它才是可访问的。
类的代码:

public class UcenikBean implements Serializable {
    static final long serialVersionUID = 1234L;
    public static Integer rb = 0;
    private String ime;
    private String prezime;
    private char pol;
    private String datumRodjenja;
    private String mejl;
    private int razred;
    private int odeljenje;
    private String bojaOciju;

    public UcenikBean() {
        super();
        idUcenik++;
        // TODO Auto-generated constructor stub
    }

public UcenikBean(String ime, String prezime, char pol, String datumRodjenja, String mejl,
            int razred, int odeljenje, String bojaOciju) {
        super();
        idUcenik++;
        this.ime = ime;
        this.prezime = prezime;
        this.pol = pol;
        this.datumRodjenja = datumRodjenja;
        this.mejl = mejl;
        this.razred = razred;
        this.odeljenje = odeljenje;
        this.bojaOciju = bojaOciju;
    }

    public static Integer getRb() { // rb is not accesible if this is static
        return rb;
    }
    public static void setRb(Integer rb) {
        UcenikBean.rb = rb;
    }
public static long getSerialversionuid() {
        return serialVersionUID;
    }
    public String getIme() {
        return ime;
    }
    public void setIme(String ime) {
        this.ime = ime;
    }
    public String getPrezime() {
        return prezime;
    }
    public void setPrezime(String prezime) {
        this.prezime = prezime;
    }
    public char getPol() {
        return pol;
    }
    public void setPol(char pol) {
        this.pol = pol;
    }
    public String getDatumRodjenja() {
        return datumRodjenja;
    }
    public void setDatumRodjenja(String datumRodjenja) {
        this.datumRodjenja = datumRodjenja;
    }
    public String getMejl() {
        return mejl;
    }
    public void setMejl(String mejl) {
        this.mejl = mejl;
    }
    public int getRazred() {
        return razred;
    }
    public void setRazred(int razred) {
        this.razred = razred;
    }
    public int getOdeljenje() {
        return odeljenje;
    }
    public void setOdeljenje(int odeljenje) {
        this.odeljenje = odeljenje;
    }
    public String getBojaOciju() {
        return bojaOciju;
    }
    public void setBojaOciju(String bojaOciju) {
        this.bojaOciju = bojaOciju;
    }
}

我的控制器中的相关代码:

@RequestMapping(value = {"/lista", "/"}, method = RequestMethod.GET)
public String lista(Model model) {
    UcenikBean x = new UcenikBean("Marko", "Markovic", 'm', new Date(2010, 1, 3), "p@mail.com", 5, 5, "plava");
    listaUcenika.add(x);
    model.addAttribute("listaUcenika", listaUcenika);
    model.addAttribute("ucenikBean", x);
    return "lista";
}

@RequestMapping(value = {"/odabirUcenika"}, method = RequestMethod.POST)
public String ispis(Model model, UcenikBean ucenikBean,
String dodavanje, String menjanje, String brisanje) {
    model.addAttribute("listaUcenika", listaUcenika);
    model.addAttribute("ucenikBean", ucenikBean);
    int x = ucenikBean.getRb();
    return "lista";
}

这是lista页面:

<!DOCTYPE html>
<html xmlns:th="http://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Lista Učenika</title>
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous">
</head>
<body>
<form class="form-group" id="formaUcenik" method="POST" action="/odabirUcenika"
            th:action="@{/odabirUcenika}" th:object="${ucenikBean}">

            <select th:if="${! listaUcenika.isEmpty()}" class="form-control" th:field="*{rb}">
            <option th:each="ucenik : ${listaUcenika}"
            th:value="${ucenikStat.index}"
            th:text="${ucenikStat.index} + ' ' + ${ucenik.ime} + ' ' + ${ucenik.prezime}"/>         
            </select>
            <input class="form-control" type="submit" value="Posaljite">
</form>
</body>
</html>

在本例中,用户输入的值应保存在“rb”字段中,并转移到下一个Map,在该Map中将打印到控制台。请解释一下,如果静态字段“rb”的getter方法也是静态的,那么为什么静态字段“rb”是不可访问的?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题