对多个类使用泛型/参数化java
我正在尝试创建一个通用/参数化代码,以便从我拥有的多个类中调用。我将对它进行编码,这样我有几个类具有相同名称的方法,所以我希望创建一种通用的方法来调用它们 假设我有3个不同的类,它们都有返回int的getAmount()方法和返回字符串的toString()方法 然后我想要一个泛型类,它可能引用这三个类中的任何一个对多个类使用泛型/参数化java,java,generics,Java,Generics,我正在尝试创建一个通用/参数化代码,以便从我拥有的多个类中调用。我将对它进行编码,这样我有几个类具有相同名称的方法,所以我希望创建一种通用的方法来调用它们 假设我有3个不同的类,它们都有返回int的getAmount()方法和返回字符串的toString()方法 然后我想要一个泛型类,它可能引用这三个类中的任何一个 public class Stuff<Project> { private Project p; public Stuff(Project a
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();
}
公共类的东西{
私人项目p;
公共物品(项目){
p=一个项目;
}
public int getValue(){
返回p.getAmount();
}
公共字符串toString(){
返回p.toString();
}
java中有什么东西可以为我提供这个功能,或者我是在用C语言思考吗?
我尝试过使用Object.getClass()在这个网站和docs.oracle网站上,我试图以各种方式来强制转换东西,以及其他一些与泛型编程相关的问题,但似乎没有我想要的。这是不可能的,因为类型擦除的工作方式吗?这里不要使用泛型,使用接口。在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
的构造函数,只要它实现项目
接口:
public class Construction implements Project {
public int getAmount() {
// implementation
}
}
...
Stuff s = new Stuff(new Construction());
您可以使用接口、抽象类或反射。除非您真的需要,否则我将避免使用反射。这看起来是接口的完美工作
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();
每个类都有一个
toString
方法,但不需要做任何事情-只需创建一个方法,该方法接受Object
并调用toString
。就getAmount
而言,这可以归结为多态性。您需要声明getAmount
方法的interface
,然后您的类就可以>实现
it。Java中没有模板。Java泛型是Java api中的概念。如何使用它取决于您自己。是的,对于您的情况,您必须执行自己的impl,您不会从盒子中取出它。谢谢!快速搜索Java接口以查找文档(然后返回到您的答案以理解它)成功了!