Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.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
Java 如何在访问值超类时使用扩展_Java_Extends - Fatal编程技术网

Java 如何在访问值超类时使用扩展

Java 如何在访问值超类时使用扩展,java,extends,Java,Extends,我混淆了扩展,我用理论解决了一些例子, 但当我来到我的主要项目时,我仍然在做一些错误的事情,我无法找到它 有人能帮我吗 RPC 当客户端调用COnnectionServiceImpl时,connectionParameter被设置 Map<String, String> 这班学生学得很好 现在, 公共类ObjectStore扩展了ConnectionServiceImpl{ //一些代码 公共对象存储(){ //TODO自动生成的构造函数存根 this.parameter=getC

我混淆了扩展,我用理论解决了一些例子, 但当我来到我的主要项目时,我仍然在做一些错误的事情,我无法找到它

有人能帮我吗

RPC

当客户端调用COnnectionServiceImpl时,connectionParameter被设置

Map<String, String>
这班学生学得很好

现在,

公共类ObjectStore扩展了ConnectionServiceImpl{
//一些代码
公共对象存储(){
//TODO自动生成的构造函数存根

this.parameter=getConnectionParameter();***在调用
getConnectionParameter();


调用
setConnectionParameter();
在需要避免NullPointerException

的地方,您似乎对成员字段的初始化顺序和所有者SIP有问题

  • 您是否已在其构造函数中初始化了
    ConnectionServiceImpl.parameter
    ?您没有在那里显示任何构造函数-您有吗?如果没有,则在构造对象之后,
    parameter
    就未初始化。这意味着在
    连接之前调用
    getConnectionParameter
    会给您一个空值指针。(虽然它不应该导致NPE-您向我们展示的代码是否真的像您所说的那样产生了NPE?)

  • 从上面可以看出,从
    ObjectStore
    的构造函数调用
    getConnectionParameter
    是一个错误,除非您之前(在父类构造函数中)初始化了
    ConnectionServiceImpl.parameter

  • 显然,您在
    ObjectStore
    中有一个名为
    parameter
    的字段(该字段与
    ConnectionServiceImpl.parameter
    重复,因此非常不推荐),或
    ConnectionServiceImpl.parameter
    ,其声明未显示在代码中,它不是
    private
    ,因此可从子类访问,并且您正试图从子类构造函数初始化它(这通常是错误的-基类应注意正确初始化其字段)。如果是这种情况,您实际上是在尝试“循环初始化”:使用通过超类getter获取的自身值初始化子类中的字段,这是愚蠢的


  • 首先,我想问一下,当您可以调用
    getParameter()
    时,为什么会有类型为
    connectionParameter
    的成员
    connectionParameter
    ,以及类型为
    Map
    的成员
    parameter

    其次,您的方法的命名方式令人困惑。设置程序习惯于使用所设置类型的参数。您的
    getConnectionParameter()
    根本不返回
    connectionParameter

    最后,当您试图在子类构造函数中分配
    参数时,它还没有初始化(除非您在超类构造函数中这样做)


    试着想想你想在这里做什么,类
    ConnectionServiceImpl
    应该负责初始化它自己的成员。

    还要添加堆栈跟踪,请在代码中添加更多详细信息父类构造函数是什么样子的?如果父类的默认构造函数初始化t他输入了连接参数。@Scorpion:没有构造函数。@fmucar我添加了更多细节和堆栈跟踪。Plz帮助。@NewCodeLearner请确保您提供的代码片段是准确的。首先,当您使用
    扩展
    两次时,您的
    对象存储
    类无法编译。其次,什么是
    CmisConnectionServiceImpl
    在上面的堆栈跟踪中?我添加了一些细节。根据我的说法,当客户端调用ConnectionServiceImpl时,参数被初始化,因为我通过在
    getConnectionParameter()中显示值来检查它
    .2.参数仅在客户端RPC调用3后初始化。
    ObjectStore
    中的
    parameter
    是私有的。我仍然将其名称更改为parameter1。@NewCodeLearner,您说
    ConnectionServiceImpl
    被调用两次,NPE发生第二次。因此
    参数是否为ini并不重要第一次初始化-第二次创建不同的对象,由于
    参数
    不是静态的,每个对象都有自己的
    参数
    。并且由于您说
    连接服务Impl
    没有构造函数,我的第2点仍然适用。但是,简单地返回字段的空值不能导致NPE-您是否正在向我们展示
    getConnectionParameter
    中的完整代码?@PéterTörök我在
    getConnectionParameter
    中添加了我的所有代码。但该代码只是为了显示
    映射图
    可能是我的下一个问题很愚蠢,但我想知道我在哪里创建了一个新参数。我只想访问
    O中的参数值bjectStore
    来自
    ConnectionServiceImpl
    @NewCodeLearner的类,所以在您刚才添加的代码中:
    Iterator Iterator=parameter.keySet().Iterator()
    取消对空指针的引用,从而触发NPE。您将自动创建一个新的
    参数
    以及每个新的
    对象存储
    (或
    ConnectionServiceImpl
    )您正在创建的实例:我只想在
    objectStore
    类中使用
    connectionservicecimpl.parameter
    中的值。参数的值被初始化为购买另一个类
    ConnectionParameter
    public class ConnectionServiceImpl extends RemoteServiceServlet{
    // some code including initialization
    private ConnectionParameter connectionParameter ;
    private Map<String, String> parameter;
    public String connection() {
            connectionParameter = new ConnectionParameter("abc","xyz",repositoryName);
            setConnectionParameter();
            setSession();
            return getConnected();
       }
    
    protected  Map<String, String> getConnectionParameter() {
    Iterator iterator = parameter.keySet().iterator();
             while(iterator.hasNext()){
    
                    String key = iterator.next().toString();  
                    String value = parameter.get(key);
                    System.out.println("key  " + key  + " value "+value);
    
        }
                return parameter;
    }
    
    private void setConnectionParameter(){
    
        this.parameter=connectionParameter.getParameter();
    }
    }
    
    public class ObjectStore extends ConnectionServiceImpl {
    // some code
    public ObjectStore() {
        // TODO Auto-generated constructor stub
        this.parameter = getConnectionParameter(); **<--- NullPointer Error**
                }
    }
    
    public class ConnectionParameter {
    
        private String repositoryID;
        private static String username;
        private static String password;
        private static String AtomPubUrl;
        private static String bindingType;
        private Map<String, String> parameter = new HashMap<String, String>();
    
        public ConnectionParameter(String username, String password,
                String repositoryId) {
            // TODO Auto-generated constructor stub
    
            AtomPubUrl = "http://192.168.1.32:9083/CaseManager/resources/Service";
            bindingType = BindingType.ATOMPUB.value();
            this.username = username;
            this.password = password;
            this.repositoryID=repositoryId;
    
            setConnectionParameter();
        }
          Map<String, String> getParameter() {
            return parameter;
        }
    
        private void setConnectionParameter() {
            parameter.put(SessionParameter.USER,username);
            parameter.put(SessionParameter.PASSWORD, password);
    
            parameter.put(SessionParameter.ATOMPUB_URL,AtomPubUrl);
            parameter.put(SessionParameter.BINDING_TYPE, bindingType);
    
            parameter.put(SessionParameter.REPOSITORY_ID, repositoryID);
        }
    
    }
    
    java.lang.NullPointerException
        at com.server.ConnectionServiceImpl.getConnectionParameter(ConnectionServiceImpl.java:107)
        at com.server.ObjectStore.<init>(ObjectStore.java:27)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at java.lang.Class.newInstance0(Class.java:355)
        at java.lang.Class.newInstance(Class.java:308)
        at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
        at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)