这基本上是一个Java代码转换器。它涉及一个GUI让用户输入类的类型,名称和方法。为了存储值,我创建了一个VirtualClass
类ArrayList<VirtualClass> classes
来存储变量boolean isPrivate
,String className
和String methodName
。但是,我发现ArrayList
没有存储任何内容...请帮我看看问题是什么
以下是课程VirtualClass
import java.util.*;
public class VirtualClass {
private static ArrayList<VirtualClass> classes = new ArrayList<VirtualClass>();
private boolean isPrivate;
private String className;
private String methodName;
public void setVirtualClass(String name, String method, boolean isP){
this.className = name;
this.isPrivate = isP;
this.methodName = method;
}
public void createClass(String name, String method, boolean isP){
this.className = name;
this.isPrivate = isP;
this.methodName = method;
classes.add(this);
}
作为参考,这里有一些来自GUI的相关代码,用户可以创建类
public class GuiAddClass extends JFrame{
private VirtualClass stObject;
...
private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){
String cName = inputClassName.getText();
String mName = inputMethodName.getText();
boolean isP = true;
if (classObject.checkName(cName) == false){
JOptionPane.showMessageDialog(null, "Class name invalid. " +
"\nEntered name should not contain java keywords or equal to other existing names. " +
"\nPlease try again.");
} else if (classObject.checkName(cName) == true) {
JOptionPane.showMessageDialog(null, "Class saved.");
// this message pane has popped up
cName = inputClassName.getText();
mName = inputMethodName.getText();
if (event.getSource() == publicButton) {
isP = false;
} else if (event.getSource() == privateButton) {
isP = true;
}
stObject = new VirtualClass();
stObject.createClass(cName, mName, isP);
}
}// end actionPerformed()
}// end Handler class
这是来自另一个类的几个方法,用于显示最终的javaCode
public String getClassName(){
String cName = "classname";
String c = "c";
for (int i=0; i<classes.size(); i++){
c = classes.get(i).className;
}
cName = c;
return cName;
}
public String getMethodName(){
String mName = "methodname";
String m = "m";
for (int i=0; i<classes.size(); i++){
m = classes.get(i).methodName;
}
mName = m;
return mName;
}
public boolean getIsPrivate(){
boolean isP = false;
for (int i=0; i<classes.size(); i++){
isP = classes.get(i).isPrivate;
}
return isP;
}
这是生成Java代码的方法
public String getJavaCode(){
String javaCode = (classObject.getPublic() + " class " +
stObject.getClassName() + stObject.getListSize() +
"{\n"+"\t"+"public void "+stObject.getMethodName()+"{\n"+"\t}"+"\n}");
return javaCode;
我程序中显示的内容是这样的,其中c应该是类名,m应该是方法名,0 = classes.size()
public class c0{
public void m{
}
}
有人能帮我解决问题吗? 我只是不知道,我收到的答案似乎不起作用。请帮忙!
答案 0 :(得分:1)
根据您发布的信息,您VirtualClass stObject
方法actionPerformed
启动VirtualClass stObject
似乎很奇怪。它的意思是每次重新创建对象时。
让您的private VirtualClass stObject;
...
stObject = new VirtualClass();
private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){
...
stObject.createClass(cName, mName, isP);
全球,例如:
{{1}}
答案 1 :(得分:0)
您的代码存在一些问题。但主要是,你的创造逻辑没有多大意义。您不应该使用实例的方法将实例添加到Static集合中。我的建议是使用静态工厂方法来做到这一点。取而代之的是:
public class VirtualClass {
private static List<VirtualClass> classes = new ArrayList<VirtualClass>();
private boolean isPrivate;
private String className;
private String methodName;
//A private constructor
private VirtualClass(String name, String method, boolean isP){
this.className = name;
this.isPrivate = isP;
this.methodName = method;
}
private void setClassName(String className){
this.className = className;
}
private void getClassName(){
return className;
}
public static VirtualClass createClass(String name, String method, boolean isP){
VirtualClass virtualClass = new VirtualClass(String name, String method, boolean isP);
classes.add(virtualClass);
return virtualClass;
}
}
现在您的代码完成方式,问题可能出现在客户端类的很多地方。这种结构更安全,通常使用。
此外,您不应该使用ArrayList键入集合,而是使用已实现的接口List。 how to use an array list?