调试-java单例模式传参问题

问题描述

java单例模式传参问题

用sshexec连接linux
ConnBean connInfo = new ConnBean(remoteAddress, userName, password);
SSHExec sshExec = SSHExec.getInstance(connInfo); 假设每次传过来的conninfo参数是变的,但是debug查看每次都是第一次的参数。
private static SSHExec ssh;
public static SSHExec getInstance(ConnBean conn)
{
if(ssh == null)
ssh = new SSHExec(conn);
return ssh;
}
这个该怎么处理?

解决方案

if(ssh == null)
ssh = new SSHExec(conn);
return ssh;
}
所以每次都返回第一次生成的instance啊。
如果你的场景是有很多remoteAddress,那么这个public static SSHExec getInstance(ConnBean conn)方法修改下,里面用一个hashMap来存已经初始化的实例。
类似
if(map.get(conn.getRemoteAddress)==null){
xxxxx
}

解决方案二:

你的这处情况不适合用单例模式;
如果非要用单例模式也不是不可以,那就把这个实例增加一个设备参数的函数setinfi(),以后调用时如此调用: SSHExec.getInstance().setinfo(connInfo);

解决方案三:

那要看你的构造函数是怎么使用这个参数的啊, new SSHExec(conn);你是直接用的conn的吗?
而且还有,一旦你使用过一次getInstance后,后面每次取到的都是同一个实例对象的。这也是单利模式的特征啊,就是始终返回同一个实例对象。

解决方案四:

你程序写的就是一个单列,对象只有一个,你可以像楼上说的改成
if(map.get(conn.getRemoteAddress)==null){
ssh = new SSHExec(conn);
}
这样就好似不同的remoteAddress获取不同的对象。

解决方案五:

单利模式。你使用过一次,后来取到的都是同一个实例对象的。 你理解的还是不透彻

解决方案六:

单例模式考的最多的啊

时间: 2024-12-30 01:14:28

调试-java单例模式传参问题的相关文章

java基础-关于Java的传参问题,javaee

问题描述 关于Java的传参问题,javaee public class TestCollection { public static void main(String[] args) { TestCollection t = new TestCollection(); char ch = 'y'; t.test(ch); } public void test(String str){ System.out.println("i am a string"); } public void

Java中数组的创建与传参方法(学习小结)_java

(一)数组的创建 数组的创建包括两部分:数组的申明与分配内存空间. int score[]=null; //申明一维数组 score=new int[3]; //分配长度为3的空间 数组的申明还有另外一种方式: int[] score=null; //把中括号写在数组名前面 通常,在写代码时,为了方便,我们将两行合并为一行: int score[]=new int score[3]; //将数组申明与分配内存写在一行 (二)传递参数 由于初学java,这里只讨论值传递,不考虑地址传递.主要有3点

使用java传参调用exe并且获取程序进度和返回结果的一种方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在某个项目中需要考虑使用java后台调用由C#编写的切图程序(exe),并且前端能够获取到切图的进度和相关描述信息. 2.解决思路 a.首先改造切图程序为接受参数从Main函数传递. b.编写java后台传参调用exe的函数. c.解决通信问题. 3.具体实现 3.1改写C#窗体程序   C#中的入口程序为Main函数,其中Main函数默认是没有参数的,如果添

java构造器,与方法怎么传参,这样不对吗?为什么结果是0

问题描述 java构造器,与方法怎么传参,这样不对吗?为什么结果是0 public class Area { int width; int length; public static void main(String[] args) { Area ar=new Area(2,3); int areas=ar.area(); System.out.println(areas); } public int area(){ return this.width*this.length; } public

struts action取数-Java Struts2 框架页面传参问题

问题描述 Java Struts2 框架页面传参问题 strut2 中 可以在action中 将页面参数封装成对象 如果我的对象包括属性对象 的集合(List) 要怎么配置才能自动封装呢 解决方案 把页面参数封装成对象,这是有限制的.一般只能封装成含有基本数据类型属性的对象,集合类型需要自己去单独处理. 解决方案二: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传的值呢 谢谢 解决方案三: 需要怎么处理呢 或者能否给我一个其他的思路 怎么处理 相同name 的标签传

java web 中文乱码问题,上传组件传参乱码解决

1 response.setHeader("Content-type", "text/html;charset=UTF-8");//设置浏览器以什么编码显示数据,注意分号 response.setCharacterEncoding("UTF-8");2 Java中文使用Unicode编码.在Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码.编码使用java.net.URLEnoder类的encode(String

参数-关于java,jsp 和js的传参问题

问题描述 关于java,jsp 和js的传参问题 怎么做到从js 从传递参数到 里面的脚本语言里面 解决方案 服务器端代码无法直接获取客户端的内容,需要提交后才能使用 http://www.w3school.com.cn/jquery/ajax_ajax.asp

java 传参 编程-【Java初学者求助】,谢谢main方法里面传参的问题

问题描述 [Java初学者求助],谢谢main方法里面传参的问题 刚开始接触Java时间不久,谢谢各位帮忙.我想要得到的结果是:输入身高和体重,然后算出来exp是否合理,谢谢,package forth; import java.io.*; public class Person { float weight; float height; String check(){ float exp = weight/(height*height); if(exp<18) return ""

java用jni调用下面C++,如何传参取值

问题描述 java用jni调用下面C++,如何传参取值 #include <iostream> #include <afx.h> #include <tchar.h> #include <ctime> #include<winsock.h> unsigned char posmstkey[9]={0x12,0x23,0x35,0x56,0x55,0x33,0x98,0x11}; char starC[56],starD[56],starK[17]