- 浏览: 174007 次
- 性别:
- 来自: 上海
最新评论
-
金元宝:
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 1097Eclipse Test and Performance To ... -
POI取得Cell的字符串(String)值
2012-10-01 19:04 27865public final static String DA ... -
把行号(row)和列号(col)转换成Excel的表示形式。 例如:A1,B2
2012-09-24 20:51 53240,0 ⇒ A1 import org.apache.p ... -
用uploadify上传文件时,取得服务器端返回数据的方法。
2012-09-13 13:50 10230一般上传文件时,如:Excel,CSV,XML 都需要检查文件 ... -
ResultSet转换成XML (转)
2012-09-06 14:02 2391众所周知XML已经成不同应用程序之间数据交换的事实上的标准。在 ... -
比较有用的Java库。
2012-08-30 22:05 1302这里记录下比较有用的Java库,但没有熟悉用过的。 Luce ... -
Java去除数字里多余的0。
2012-08-29 13:49 6202public static String getPret ... -
正则表达式分析CSV行。
2012-08-28 14:19 7String regex = "(?!\\\&q ... -
HttpClient的简单例子。
2012-08-20 15:49 6635package sh.pl; import java ... -
使HttpClient能处理错误ResponseHeader的响应信息。
2012-08-17 22:30 5147在特定条件下,也许需要来定制HTTP报文通过线路传递,越过了可 ... -
解决readLine() 不区分\r \n的问题。
2012-08-16 14:44 2470csdn上碰到一个提问者希望只在\n时,才换行来读取文本文件的 ... -
检查不包含重复字符的正则表达式
2012-08-15 16:31 1210以下[A-Z]可以根据需要修改。 //匹配不包含重复字母 ... -
下载文件类型和setContentType对应关系
2012-08-15 16:03 1905'ez' => 'application/andrew- ... -
Java解析计算式 (例:四则运算)
2012-08-15 12:37 1615http://www.ne.jp/asahi/hishidam ... -
解决文件下载时文件名乱码在ie和firefox下面表现不一致问题
2012-08-15 10:34 1209// 其中 Base64 类来自 org.apache.c ... -
TERASOLUNA学习笔记
2012-08-09 16:36 8742下面的项目可能要用到TERASOLUNA。 为了逼自己每天都能 ... -
用Jena通过SPARQL读取RDF内容
2012-07-17 10:41 5750package sh.pl; import java ... -
Java 去除空格 (全角半角)的Trim函数。
2010-12-17 12:15 6178Java删半角全角空格的Trim(去除开始和结尾的空格)函数。 ... -
用Java使窗口(window)置于最前方(front)
2010-11-16 14:03 2411利用library Jacob Jacob主页 http:// ...
相关推荐
package-info.class
已知 B 程式的 Package Name 與要啟動的 Class Name,則直接在 下載此源碼 程式中,將 Package Name 與 Class Name 透過 intent 方法代入,並 startActivity 該 Intent 即可
4. 使用`java <package>.<classname>`命令运行编译后的程序,`<package>`是包名,`<classname>`是类名。 这个过程对于理解Java程序的组织结构和DOS命令的使用具有重要意义,也是每个Java开发者必备的基础技能。
所有的class成员名劫被互相隔绝。class A的 函数f(),其名称不会和class B()中具有相同标记式的f()相冲突。与此相类似,为了不使class名称发生冲突,于是引入了package 进行管理。 所谓程序库就是一组class文件。...
Eclipse中在项目或src上点右键new时没有 class和package解决方法,
在创建可执行的`.jar`文件时,通常会包含一个名为`MANIFEST.MF`的配置文件,其中的`Main-Class`属性指定程序的入口点。这使得可以通过`java -jar myapp.jar`来直接运行打包后的应用。 总结起来,Java的ClassPath是...
这段代码创建了一个新的Excel文件,添加了一个名为"Sheet1"的工作表,并填充了两行数据。 在Unity中,你还可以结合ExcelPackage生成相关的数据代码。例如,可以读取Excel中的配置表,然后自动生成C#类或者JSON文件...
matlab-json-master This package contains Matlab class to serializedecode matlab object in json format..zip
2. **包的声明**:使用`package`关键字,并将Java源文件置于与包名一致的目录结构中。 3. **编译与路径**:使用`javac`命令时,确保正确指定`-d`选项以生成正确的目录结构。 4. **Classpath设置**:确保项目依赖的...
Package Geometry 在焊盘图形中的图形,在焊盘图形中添加的标识、说明、注释等信息应添加到该类的子类上。ASSEMBLY-TOP 和 ASSEMBLY-BOTTOM 是与装配相关的内容,表示的是零件的外形和方向。PLACE-BOUND-TOP 和 ...
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); ...
在Java编程语言中,`package`和`import`是非常重要的两个概念,它们分别用于组织代码结构和引入外部类或包,对于理解Java程序的模块化和包管理机制至关重要。 ### Java中的Package #### 1. Package的概念 在Java中...
这将返回类似`package:/data/app/<package_name>=/path/to/apk_file.apk`的结果,其中 `<package_name>` 就是包名。 2. **反编译APK**:使用工具如JAR解压器或专门的APK分析工具(如Apktool、dex2jar等),可以反...
在MyEclipse中直接查看.class文件是开发过程中的一项实用技能,尤其当源代码不可用时。这个过程涉及到安装和配置反编译工具以及相应的插件。以下是对如何在MyEclipse中实现这一功能的详细说明: 首先,需要下载两个...
provider.addIncludeFilter(new AnnotationTypeFilter(MyAnnotation.class)); // 假设MyAnnotation是我们关注的注解 for (BeanDefinition bean : provider.findCandidateComponents("com.example.myapp")) { // ...
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...
这些文件被组织成与Java包(package)相匹配的目录结构。当我们运行一个JAR文件时,Java虚拟机(JVM)会加载其中的class文件并执行其中的代码。 修改JAR文件中的class文件涉及以下几个步骤: 1. **解压JAR文件**:...
当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,运行, 等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can't find class HelloWorld 或者 Exception in thread main ...