我正在尝试使用另一个类中的方法,以在另一个类的方法中使用(这个另一个类不是驱动程序)。有点复杂,但是我将尝试简化我的情况:
public class Class1 {
private String component;
void Class1(String component) {
this.component = component
}
String get() {
return component;
}}
这是第二堂课
public class Class2<Class1> {
ArrayList<Class1> arraylistofClass = new ArrayList<Class1>();
void addandPrint(Class1 class1) {
arraylistofClass.add(class1);
System.out.println(class1.get());
}}
所以本质上,我试图添加第一类的数组列表,填充它,然后打印出第二类的数组列表所填充的内容。但是,当我尝试在驱动程序中运行addandPrint方法时,无法在代码中访问class1的.get()方法。很抱歉,这有点令人困惑,但是没有人知道是否有更好的方法吗?
答案 0 :(得分:1)
问题出在
public class Class2<Class1> {
在这里声明一个名为Class1
的 type参数。该参数的名称遮盖了实际的类名,这意味着当您在Class1
的定义中键入Class2
时,它的意思不是“我刚刚在另一个文件中定义的类”,而是“ Class2
的用户选择在<>
之间插入的任何类型”。并且不能保证该类型甚至具有get()
方法。
您似乎根本没有理由要Class2
拥有类型参数,因此快速修复是将其更改为< / p>
public class Class2 {
并保留其他所有内容。
答案 1 :(得分:0)
据我了解,您创建了一个类,然后创建了该类的某些元素(泛型),将它们添加到数组列表中,然后您在访问方法时遇到了麻烦。 如果我错了请纠正我。
如果是这种情况,请遵循以下代码。
class Student{
private String name;
private int id;
Student(String name, id){
this.name = name;
this.id = id;
}
public String getName(){ return name;}
public int getId(){ return id;}
public void setName(String name){ this.name = name; }
public void intId(int id){ this.id = id;}
public String someMethod(){
return "Mr. " + name + "(" + id + ")";
}
} // end class
第二堂课
class Class2{
public static void main(String[] args){
List<Student> students = new ArrayList<>();
//Adding elements to the List
students.add(new Student("abc", 1));
students.add(new Student("def", 2));
students.add(new Student("geh", 3));
students.add(new Student("ijk", 4));
for(Student student : students)
System.out.println(student.someMethod()); //You can access any public and protected method like this
}
}
答案 2 :(得分:0)
您在get
方法上缺少访问修饰符。默认情况下,这使它成为程序包专用的(可访问同一程序包中的所有类)。就您而言,您需要将其公开:
public String getComponent() {
return component;
}
此外,这也不是您在Java中定义构造函数的方式。您正在定义一个返回类型为void
的方法,该方法恰好与该类具有相同的名称。 You can see the docs here