- 浏览: 170791 次
- 性别:
- 来自: 上海
最新评论
-
金元宝:
HttpClient的简单例子。 -
sty00:
感谢分享
解决readLine() 不区分\r \n的问题。 -
dai_lm:
andyzhchy 写道新建一个类继承SimpleOnGest ...
丰富多彩的Android onTouch事件 -
谁说我不是会员:
我很想知道JDBCToXML是从哪里来的?是自己写的一个类吗? ...
ResultSet转换成XML (转) -
Goro:
enet_java 写道不错,不过不明白lZ为什么要通过这种方 ...
从不含package名的class名 取得 含package名的class名
比如1)
有个类叫
a.b.c.MyClass
输入1个字符串"MyClass" 返回字符串"a.b.c.MyClass"
比如2)
有重名的情况,全部返回
有两个类
a.b.c.MyClass
x.y.z.MyClass
输入1个字符串"MyClass"
返回字符串
"a.b.c.MyClass"
和
"x.y.z.MyClass"
调用方法
完整代码
参考下面的文章
Initialization on demand holder
http://book.51cto.com/art/201202/318464.htm
如果只简单用static的成员变量来实现单例模式,不能实现延迟加载。
当然这是个小问题。 除非构造这个对象需要很大开销。
有个类叫
a.b.c.MyClass
输入1个字符串"MyClass" 返回字符串"a.b.c.MyClass"
比如2)
有重名的情况,全部返回
有两个类
a.b.c.MyClass
x.y.z.MyClass
输入1个字符串"MyClass"
返回字符串
"a.b.c.MyClass"
和
"x.y.z.MyClass"
调用方法
ArrayList<String> fullNames = FullClassNameGetter.getInstance().getFullClassName(不含包的类名);
完整代码
import java.io.File; import java.io.IOException; import java.util.ArrayList; //import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; public class FullClassNameGetter { private static final String JAVA_CLASS_PATH = "java.class.path"; private static final String CLASSPATH_SEPARATOR = System.getProperty("path.separator"); private static final String PACKAGE_SEPARATOR = "."; private static final String JAR_DIR_SEPARATOR = "/"; private static final String CLASS_SUFFIX = ".class"; private HashMap<String, ArrayList<String>> nameingMap; private String[] jdkJars = {"lib/rt.jar", "lib/jsse.jar", "lib/jce.jar", "lib/charsets.jar", "lib/ext/dnsns.jar", "lib/ext/localedata.jar", "lib/ext/sunjce_provider.jar", "lib/ext/sunmscapi.jar", "lib/ext/sunpkcs11.jar"}; private static class FullClassNameGetterSingletonHolder { private static FullClassNameGetter instance = new FullClassNameGetter(); } private FullClassNameGetter() { final String initialClasspath = System.getProperty(JAVA_CLASS_PATH); //Date now = new Date(); setClassPath(initialClasspath); //System.out.println("initialize FullClassNameGetter done. " + (new Date().getTime() - now.getTime())); } public static FullClassNameGetter getInstance() { return FullClassNameGetterSingletonHolder.instance; } public ArrayList<String> getFullClassName(String className) { ArrayList<String> ret = null; if (className.indexOf(PACKAGE_SEPARATOR) != -1) { ret = new ArrayList<String>(); ret.add(className); return ret; } ret = nameingMap.get(className); return ret; } public void setClassPath(String classPath) { nameingMap = new HashMap<String, ArrayList<String>>(); String[] classPathArray = classPath.split(CLASSPATH_SEPARATOR); File file; for (String onePath : classPathArray) { file = new File(onePath); if (file.exists()) { if (file.isDirectory()) { // dir setDirClasses(file, ""); } else { // jar file setJarClasses(file); } } } String jreDir = System.getProperty("java.home"); for (String jreJar : jdkJars) { file = new File(jreDir + JAR_DIR_SEPARATOR + jreJar); if (file.exists()) { // jar file setJarClasses(file); } } } private void setDirClasses(File classDir, String path) { File[] files = classDir.listFiles(); String className; for (File file : files) { if (file.isDirectory()) { setDirClasses(file, path + file.getName() + PACKAGE_SEPARATOR); } else { if (file.getName().endsWith(CLASS_SUFFIX)) { className = file.getName().substring(0, file.getName().length() - CLASS_SUFFIX.length()); if (!"".equals(path)) { setNamingMap(className, path + className); } else { //no package setNamingMap(className, className); } } } } } private void setJarClasses(File jarFile) { JarFile jf = null; try { jf = new JarFile(jarFile); Enumeration<JarEntry> es = jf.entries(); JarEntry entry; String simpleName; while (es.hasMoreElements()) { entry = es.nextElement(); if (!entry.isDirectory()) { String fullName = entry.getName(); if (fullName.endsWith(CLASS_SUFFIX)) { fullName = fullName.substring(0, fullName.length() - CLASS_SUFFIX.length()); int index = fullName.lastIndexOf(JAR_DIR_SEPARATOR); if (index != -1) { simpleName = fullName.substring(index + 1, fullName.length()); fullName = fullName.replace(JAR_DIR_SEPARATOR, PACKAGE_SEPARATOR); setNamingMap(simpleName, fullName); } else { //no package simpleName = fullName; setNamingMap(simpleName, fullName); } } } } } catch (IOException e) { //do nothing } finally { if (jf != null) { try { jf.close(); } catch (IOException e) { //do nothing } } } } private void setNamingMap(String simpleName, String fullName) { ArrayList<String> value = nameingMap.get(simpleName); if (value == null) { value = new ArrayList<String>(); nameingMap.put(simpleName, value); } if (!value.contains(fullName)) { value.add(fullName); } } }
评论
2 楼
Goro
2012-02-26
enet_java 写道
不错,不过不明白lZ为什么要通过这种方式来获取实例呢?给解释一下呗。多谢了
引用
private static class FullClassNameGetterSingletonHolder
{
private static FullClassNameGetter instance = new FullClassNameGetter();
}
public static FullClassNameGetter getInstance()
{
return FullClassNameGetterSingletonHolder.instance;
}
{
private static FullClassNameGetter instance = new FullClassNameGetter();
}
public static FullClassNameGetter getInstance()
{
return FullClassNameGetterSingletonHolder.instance;
}
参考下面的文章
Initialization on demand holder
http://book.51cto.com/art/201202/318464.htm
如果只简单用static的成员变量来实现单例模式,不能实现延迟加载。
当然这是个小问题。 除非构造这个对象需要很大开销。
1 楼
enet_java
2010-12-22
不错,不过不明白lZ为什么要通过这种方式来获取实例呢?给解释一下呗。多谢了
引用
private static class FullClassNameGetterSingletonHolder
{
private static FullClassNameGetter instance = new FullClassNameGetter();
}
public static FullClassNameGetter getInstance()
{
return FullClassNameGetterSingletonHolder.instance;
}
{
private static FullClassNameGetter instance = new FullClassNameGetter();
}
public static FullClassNameGetter getInstance()
{
return FullClassNameGetterSingletonHolder.instance;
}
发表评论
-
Java Memory Leak调查工具
2012-10-26 12:47 1056Eclipse Test and Performance To ... -
POI取得Cell的字符串(String)值
2012-10-01 19:04 27754public final static String DA ... -
把行号(row)和列号(col)转换成Excel的表示形式。 例如:A1,B2
2012-09-24 20:51 52760,0 ⇒ A1 import org.apache.p ... -
用uploadify上传文件时,取得服务器端返回数据的方法。
2012-09-13 13:50 10177一般上传文件时,如:Excel,CSV,XML 都需要检查文件 ... -
ResultSet转换成XML (转)
2012-09-06 14:02 2321众所周知XML已经成不同应用程序之间数据交换的事实上的标准。在 ... -
比较有用的Java库。
2012-08-30 22:05 1247这里记录下比较有用的Java库,但没有熟悉用过的。 Luce ... -
Java去除数字里多余的0。
2012-08-29 13:49 6110public static String getPret ... -
正则表达式分析CSV行。
2012-08-28 14:19 7String regex = "(?!\\\&q ... -
HttpClient的简单例子。
2012-08-20 15:49 6579package sh.pl; import java ... -
使HttpClient能处理错误ResponseHeader的响应信息。
2012-08-17 22:30 5080在特定条件下,也许需要来定制HTTP报文通过线路传递,越过了可 ... -
解决readLine() 不区分\r \n的问题。
2012-08-16 14:44 2380csdn上碰到一个提问者希望只在\n时,才换行来读取文本文件的 ... -
检查不包含重复字符的正则表达式
2012-08-15 16:31 1135以下[A-Z]可以根据需要修改。 //匹配不包含重复字母 ... -
下载文件类型和setContentType对应关系
2012-08-15 16:03 1826'ez' => 'application/andrew- ... -
Java解析计算式 (例:四则运算)
2012-08-15 12:37 1544http://www.ne.jp/asahi/hishidam ... -
解决文件下载时文件名乱码在ie和firefox下面表现不一致问题
2012-08-15 10:34 1163// 其中 Base64 类来自 org.apache.c ... -
TERASOLUNA学习笔记
2012-08-09 16:36 8571下面的项目可能要用到TERASOLUNA。 为了逼自己每天都能 ... -
用Jena通过SPARQL读取RDF内容
2012-07-17 10:41 5688package sh.pl; import java ... -
Java 去除空格 (全角半角)的Trim函数。
2010-12-17 12:15 6031Java删半角全角空格的Trim(去除开始和结尾的空格)函数。 ... -
用Java使窗口(window)置于最前方(front)
2010-11-16 14:03 2344利用library Jacob Jacob主页 http:// ...
相关推荐
package-info.class
已知 B 程式的 Package Name 與要啟動的 Class Name,則直接在 下載此源碼 程式中,將 Package Name 與 Class Name 透過 intent 方法代入,並 startActivity 該 Intent 即可
所有的class成员名劫被互相隔绝。class A的 函数f(),其名称不会和class B()中具有相同标记式的f()相冲突。与此相类似,为了不使class名称发生冲突,于是引入了package 进行管理。 所谓程序库就是一组class文件。...
matlab-json-master This package contains Matlab class to serializedecode matlab object in json format..zip
VB封装一个文本文件读写类含示例VB package to read and write a text file containing the sample class
public class B { public static void main(String[] args) { File file = new File("c:\\a.jpg"); FileInputStream is = null; try { is = new FileInputStream(file); } catch (FileNotFoundException...
public class CustomerTest { public static void main(String[] args) { Customer cust = new Customer("jane","smith"); Account acct = new Account(1000,2000,0.0123); cust.setAccount(acct); ...
usb mass storage class specification overview buck-only cbi ufi ...
Eclipse中在项目或src上点右键new时没有 class和package解决方法,
动态扫描指定的包,包含其所有子包 扫描包下面的class文件,并将javaBean注册到spring环境
MyEclipse中直接查看.class文件MyEclipse中直接查看.class文件MyEclipse中直接查看.class文件MyEclipse中直接查看.class文件
当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,运行, 等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can't find class HelloWorld 或者 Exception in thread main ...
package cyw; public class Yanwen { public static void main(String[] args) { System.out.println("你好,陈燕文!"); } } 这是我写的例子,里面有详细截图,因为前几天有个同学问我,所以我就截图做成...
一份详细解释java的classpath和package的含义和配置方法的文档。
根据接口类名称和jar文件读取class文件 可以改造成根据package名读取class文件等等。。。 扩展性很强一读既懂
一、运行class文件 执行带main方法的class文件,命令行为: ...包名>.CLASS文件名 例如:PackageTest.java中,其包名为:com.ee2ee.test,对应的语句为: package com.ee2ee.test; PackageTest.java
a linux package for class
(1)创建一个三角形类Triangle,包含的属性有三条边的长sideA,sideB,sideC,包含的方法有构造方法(两个,一个没有参数,一个给定三条边的长度),求面积方法area(),求周长方法getLength();...
Jama is based on a single matrix class within a strictly object-oriented framework. Jampack uses a more open approach that lends itself to extension by the user. As it turns out, for the casual user ...
resolve-package-json 解决package.json依赖版本安装 $ npm install --save resolve-package-json用法 const { resolver } = require ( 'resolve-package-json' )const pkg = require ( './package.json' )resolver ...