这是一个两部分问题。首先,是否可以使用通用定义的对象方法,例如:
public class MyClass<T>{
public MyClass(T t){
t.setText("Hello World"); // Assume class T is JMenuIten has the special method setText
}
}
此代码不能正常工作,但显示了我的目标。我想使用特定于该封装对象的方法。但是,如果我要传入另一个对象,例如包含封装方法.doSomething。我想做...
public class MyClass<T>{
public MyClass(T t){
t.doSomething("Hello World"); // Assume class T is JMenuIten has the special method setText
}
}
我希望有可能这样做,否则我将不得不编写多个构造函数来处理我的所有特殊情况。
我的第二个问题是类似的,我想返回一个GUI组件并执行一个语句,如...
myJPanel.getComponent(1).setText("Hello"); // Assuming index 1 is a JLabel and setText is a specific method defined in the JLabel class
这段代码不起作用,因为编译器无法提前告诉运行时需要什么符号,尽管我希望有一种方法可以让这样的东西工作。我还想知道是否有一个方法可以告诉我什么类型.getComponent()返回,如果可能的话。我试图使代码尽可能动态,而不必对所有内容进行硬编码。
由于
答案 0 :(得分:3)
您必须使用有界通配符。
e.g。
public interface MyObject {
void myMethod();
}
public class GenericObj<T extends MyObject> {
private T t;
public void invokeMethod() {
t.myMethod(); //this way you can invoke methods (declcared in MyObject) on T
}
}