Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
restful-java私有vs公共_Java_Rest - Fatal编程技术网

restful-java私有vs公共

restful-java私有vs公共,java,rest,Java,Rest,这是一段正常工作的代码。但当第三行和第四行变为公共行时 @XmlRootElement public class Activity { private String description; private int duration; public String getDescription() { return description; } public void setDescription(String description) {

这是一段正常工作的代码。但当第三行和第四行变为公共行时

@XmlRootElement
public class Activity {
    private String description;
    private int duration;
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public int getDuration() {
        return duration;
    }
    public void setDuration(int duration) {
        this.duration = duration;
    }

我得到错误500。我不明白
public
成员类型有什么问题。每个对象都可以访问
public
成员类型。还请解释何时使用
public
private

错误500不是真正的错误。查看日志,您可能会看到真正的错误

以下是一个(最小、完整且可验证的示例):

运行它会出现以下错误:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlRootElement;

public class Test {
    public static void main(String[] args) throws Exception {
        JAXBContext.newInstance(Activity.class);
    }
}
@XmlRootElement
class Activity {
    public String description;
    public int duration;
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public int getDuration() {
        return duration;
    }
    public void setDuration(int duration) {
        this.duration = duration;
    }
}
线程“main”com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException中的异常:2次illegalannotationException计数 类有两个同名的属性“description” 此问题与以下位置有关: 在public java.lang.String Activity.getDescription()中 活跃 此问题与以下位置有关: 在public java.lang.String Activity.description 活跃 类有两个同名的属性“duration” 此问题与以下位置有关: 在public int Activity.getDuration()中 活跃 此问题与以下位置有关: 在公共int活动中。持续时间 活跃 位于com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:277) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.(JAXBContextImpl.java:124) 位于com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123) 位于com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中 位于java.lang.reflect.Method.invoke(Method.java:498) 位于javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247) 位于javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234) 位于javax.xml.bind.ContextFinder.find(ContextFinder.java:462) 位于javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641) 位于javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584) at Test.main(Test.java:7) 如您所见,将字段
设置为public
意味着JAXB看到两个同名属性,一个由
public
字段定义,另一个由
get
/
set
bean方法定义

由于如果将字段
设置为公共的
,则使用getter和setter方法没有任何意义,因此如果希望字段
为公共的
,请删除这些方法


我建议不要把它们公开。你为什么要这么做?当您有用于访问字段的getter和setter方法时,就不需要了。

如果您将字段公开,使用getter和setter方法有什么意义?当您将其公开时,系统会看到两个同名的值:字段和属性(get/set)。删除get/set方法,或保持字段私有。
import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlRootElement;

public class Test {
    public static void main(String[] args) throws Exception {
        JAXBContext.newInstance(Activity.class);
    }
}
@XmlRootElement
class Activity {
    public String description;
    public int duration;
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public int getDuration() {
        return duration;
    }
    public void setDuration(int duration) {
        this.duration = duration;
    }
}
Exception in thread "main" com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions
Class has two properties of the same name "description"
    this problem is related to the following location:
        at public java.lang.String Activity.getDescription()
        at Activity
    this problem is related to the following location:
        at public java.lang.String Activity.description
        at Activity
Class has two properties of the same name "duration"
    this problem is related to the following location:
        at public int Activity.getDuration()
        at Activity
    this problem is related to the following location:
        at public int Activity.duration
        at Activity

    at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124)
    at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123)
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:462)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
    at Test.main(Test.java:7)