我正在尝试创建一个通用/参数化代码来从我拥有的多个类中调用。我将对其进行编码,因此我有几个具有相同名称的方法的类,所以我希望创建一种通用的方法来调用它们。
假设我有3个不同的类,这些类都将具有返回ints的getAmount()方法和返回字符串的toString()方法
然后我想要一个可能引用这三个中的任何一个的泛型类。
public class Stuff<Project> {
private Project p;
public Stuff(Project aProject) {
this.p = aProject;
}
public int getValue() {
return p.getAmount();
}
public String toString() {
return p.toString();
}
java中是否有任何可以为我提供此功能的内容,或者我在使用C进行思考? 我尝试过以各种方式使用Object.getClass()来尝试构建内容,而本网站和docs.oracle网站上的其他几个与通用编程相关的问题似乎没有我想要的东西。这是不可能的,因为类型擦除工作的方式?
答案 0 :(得分:5)
不要在这里使用泛型,使用接口。在Java中,您使用接口告诉编译器类实现某些方法,而不告诉它如何实现这些方法。
public interface Project {
int getAmount();
}
public class Stuff {
private Project p;
public Stuff(Project aProject) {
this.p = aProject;
}
public int getValue() {
return p.getAmount();
}
}
您可以将任何类的实例传递给Stuff
的构造函数,只要它实现Project
接口:
public class Construction implements Project {
public int getAmount() {
// implementation
}
}
...
Stuff s = new Stuff(new Construction());
答案 1 :(得分:1)
您可以使用界面,抽象类或反射。我会避免使用反射,除非你真的需要它。这看起来像是一个完美的界面工作。
public interface Ammount {
public int getAmmount();
}
public class BankAccount implements Ammount {
@Override
public int getAmmount() {
return -10; // broke
}
}
public class PiggyBank implements Ammount {
@Override
public int getAmmount() {
return 12; // rich
}
}
然后您可以使用某些代码,例如
BankAccount myBankAccount = new BankAccount();
Ammount ammount = myBankAccount;
ammount.getAmmount();
PiggyBank myPiggyBank = new PiggyBank();
Ammount ammount = myPiggyBank;
ammount.getAmmount();