java 给类名 获取属性_在Java中,如何从text / .java文件获取类名,属性,方法?...

我需要得到Java项目中类和其他一些信息的所有名称。

读取.java文件中的所有文本,并使用正则表达式获取:

类:名称、修饰符、属性、方法

类的属性:名称、修饰符、类型

方法:名称、修饰符、返回类型

下面是一个项目示例:public abstract class Shape {

int numberOfSides;

protected abstract double calculateArea();

public final int getNumberOfSides() {

return numberOfSides;

}

}

public class Circle extends Shape{

int radius;

public Circle(int radius) {

this.radius = radius;

}

@Override

protected double calculateArea() {

// TODO Auto-generated method stub

return Math.PI*radius*radius;

}

}

public class Square extends Shape{

int sideLength;

Square() {

numberOfSides = 4;

}

public void setSideLengt(int sideL) {

sideLength = sideL;

}

@Override

protected double calculateArea() {

// TODO Auto-generated method stub

return this.sideLength*this.sideLength;

}

}

我用这个正则表达式:"class\\s*(?[a-zA-Z][a-zA-Z\\d_\\$]*)"来获取类名。

但是获取其他信息是很困难的。你能帮助我吗?是吗?

最佳答案:

是的,这要困难得多。

首先,你需要承认你的regex过于简单化了这个问题。请看下面的片段:class test {

/* class is important */

class smurf {

}

}

class test3 {

}

你的expression会找到所有的课程。但它不会注意到test和smurf之间的嵌套关系。更糟糕的是,它还会发现不存在的类,比如注释中的假阳性。最后,你的regex没有给你任何继承关系。

现在假设您可以定义一个伟大的regex表达式来检测成员定义:然后您将如何区分test的成员和smurf的成员?所以您的解析逻辑需要跟踪您在哪个类中解析什么。

很快,您将遇到解析方法参数和泛型参数的问题,因为您需要将在其他地方定义的新类型添加到解析词汇表中。

所以最后,要解决问题,您需要一个真正的java language parser,就像编译器中的一样复杂。或者你可以使用existing tools而不是重新发明你自己的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值