java獲取所有類
❶ java怎麼獲取src目錄下所有的包名,類名,方法名 以及通過一個類名獲得該類下的所有方法名
可以使用以下代碼來獲取src目錄下所有的包名,類名,方法名 以及通過一個類名獲得該類下的所有方法名。
import java.io.File;
import java.lang.reflect.Method;
public class LoopApp {
public static void main(String[] args) throws Exception {
String packageName = "";
File root = new File(System.getProperty("user.dir") + "\\src");
loop(root, packageName);
}
public static void loop(File folder, String packageName) throws Exception {
File[] files = folder.listFiles();
for (int fileIndex = 0; fileIndex < files.length; fileIndex++) {
File file = files[fileIndex];
if (file.isDirectory()) {
loop(file, packageName + file.getName() + ".");
} else {
listMethodNames(file.getName(), packageName);
}
}
}
public static void listMethodNames(String filename, String packageName) {
try {
String name = filename.substring(0, filename.length() - 5);
Object obj = Class.forName(packageName + name);
Method[] methods = obj.getClass().getDeclaredMethods();
System.out.println(filename);
for (int i = 0; i < methods.length; i++) {
System.out.println("\t" + methods[i].getName());
}
} catch (Exception e) {
System.out.println("exception = " + e.getLocalizedMessage());
}
}
}
❷ Java 獲取包所有class
既然是封到包里的,遍歷確實是有點麻煩
思路如下:
輸入包名
轉換為資源路徑名,即以『/』替換『.』
找到ClassLoader,並獲得資源名對於的資源對象
判斷資源對象是否為jar包內
4.1若否,則使用文件系統進行處理為文件夾,之後遍歷名稱進行類載入。這里直接使用資源路徑名,會是其真實位置,不用關注因部署在tomcat上而產生的路徑變化。
4.2若是,則構造一個jar文件類,使用jar操作類遍歷內容,進行類載入。
實現參考(其實我只是把它的思路總結出來):http://guoliangqi.iteye.com/blog/644876
❸ 怎麼得到java類下引用的所有的類
如這個類:
import java.util.*;
import java.lang.String;
public class Info {
Date date = null;
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
public List<String> getTimes(Integer in,String s){
date = new Date();
List<String> as = new ArrayList<String>();
as.add("s");
as.add("1");
return as;
}
}
我怎麼得到所引用的類是:
java.util.Date,
java.util.List,
java,util.ArrayList,
java.lang.String,
java.lang.Integer;
我使用的是eclipse ast, 可以得到但是不對,比如:
得到欄位申明:
1,Date date = null; //這個我只能得到類型為Date,而且不是java.util.Date,因此我無法知道,這 個Date是java.util.Date,還是java.sql.Date;
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); //這個得到的類型就是直接是:java.sql.Date;
問題:請問這個應該怎麼確定?
2,還有返回類型:public List<String> getTimes(Integer in,String s)。這個返回是List<String>,我這怎麼確實這個帶有泛型的類型?
3,還有關於註解的類型,不過註解我想一定要先引入包吧。
4,如果我在代中用到沒有申明的類,應該怎麼得到呢?如:
Calendar cal = Calendar.getInstance();
❹ java父類如何獲得所有子類的名稱
java中子類可以獲取父類,是因為java語言規范強制要求所有非object類必須有父類,類在編譯的時候,父類唯一確定,編譯器會將父類的引用記錄在class文件裡面。
反過來,編譯器不會給你記錄子類,想要獲取,只能自己根據情況實現。比如在載入一個類的時候添加判斷,或者強制要求這些類滿足特定的條件,通過這個條件去獲取類的名稱
❺ java如何通過反射獲取包中所有的類
先通過IO,定位到這個包
通過File.list得到一個包含這個包下所有class的文件的數組。
循環這個數組,用包名拼接每一個遍歷出來的文件的名字,得到每一個完整的類名(即,包名加類名)
通過class.forname反射得到每一個類實例
❻ java中如何通過反射獲取一個.java文件中的所有類。
對象.gerClass().getName()就是了,對象時誰的,最後就是誰的全名,不會有內部類的區別
如果沒有對象那就是:類名.class.getName(),不過這樣是閑的無聊,有類名,再返回字元串形式的類名
❼ Java中怎樣獲取一個類的所有子類
1、面向對象思想的繼承是子類繼承父類,父類被其它子類繼承在JAVA虛擬機的容器中並沒有直接介面獲取;
2、如果是在一個項目內獲取父類的子類繼承情況,參考這個代碼:
packagefind;
importjava.io.File;
importjava.io.IOException;
importjava.net.URL;
importjava.util.ArrayList;
importjava.util.List;
importfind.test.Intf;
importfind.test.Man;
publicclassClassUtil{
publicstaticvoidmain(String[]args){
try{
System.out.println("介面實現類:");
for(Class<?>c:getAllAssignedClass(Intf.class)){
System.out.println(c.getName());
}
System.out.println("子類:");
for(Class<?>c:getAllAssignedClass(Man.class)){
System.out.println(c.getName());
}
}catch(ClassNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*獲取同一路徑下所有子類或介面實現類
*
*@paramintf
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getAllAssignedClass(Class<?>cls)throwsIOException,
ClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
for(Class<?>c:getClasses(cls)){
if(cls.isAssignableFrom(c)&&!cls.equals(c)){
classes.add(c);
}
}
returnclasses;
}
/**
*取得當前類路徑下的所有類
*
*@paramcls
*@return
*@throwsIOException
*@throwsClassNotFoundException
*/
publicstaticList<Class<?>>getClasses(Class<?>cls)throwsIOException,
ClassNotFoundException{
Stringpk=cls.getPackage().getName();
Stringpath=pk.replace('.','/');
ClassLoaderclassloader=Thread.currentThread().getContextClassLoader();
URLurl=classloader.getResource(path);
returngetClasses(newFile(url.getFile()),pk);
}
/**
*迭代查找類
*
*@paramdir
*@parampk
*@return
*@throwsClassNotFoundException
*/
privatestaticList<Class<?>>getClasses(Filedir,Stringpk)throwsClassNotFoundException{
List<Class<?>>classes=newArrayList<Class<?>>();
if(!dir.exists()){
returnclasses;
}
for(Filef:dir.listFiles()){
if(f.isDirectory()){
classes.addAll(getClasses(f,pk+"."+f.getName()));
}
Stringname=f.getName();
if(name.endsWith(".class")){
classes.add(Class.forName(pk+"."+name.substring(0,name.length()-6)));
}
}
returnclasses;
}
}
❽ 【java】如何 獲取 抽象類的 所有實現類
一般是
父類 =new 子類。
❾ Java靜態方法獲取所屬類的信息
靜態方法method(),只能把屬性也要設置成static的,才能訪問到你的屬性
但是你的目的:在方法體內部想獲取當前所屬類的類型信息
建議你可以這樣:舉個小例子
class
demo
{
private
int
num;
public
demo(){}
public
int
getNum()
{
return
this.num;
}//這個方法就很輕松的獲取你的屬性的信息;
}
o(∩_∩)o...希望你明白...
❿ java 獲取所有帶註解的類
既然是基於spring,可以這樣:
ResourcePatternResolver rpr = new ();
Resource[] res = rpr.getResources("classpath*: **/*.class"); // classpath*:帶*號會找jar中的class
然後根據resource取clas路徑就行
String className = res[0].getURL().getPath();
className = className.split("(classes/)|(!/)")[1];
className = className.replace("/", ".").replace(".class", "");
Object obj = Class.forName(className);
話說我最近也在寫一個這樣的MVC。。要不咱兩合夥? 我寫的也是基於註解,不過要支持REST風格