对多个类使用泛型/参数化java

对多个类使用泛型/参数化java,java,generics,Java,Generics,我正在尝试创建一个通用/参数化代码,以便从我拥有的多个类中调用。我将对它进行编码,这样我有几个类具有相同名称的方法,所以我希望创建一种通用的方法来调用它们 假设我有3个不同的类,它们都有返回int的getAmount()方法和返回字符串的toString()方法 然后我想要一个泛型类,它可能引用这三个类中的任何一个 public class Stuff<Project> { private Project p; public Stuff(Project a

我正在尝试创建一个通用/参数化代码,以便从我拥有的多个类中调用。我将对它进行编码,这样我有几个类具有相同名称的方法,所以我希望创建一种通用的方法来调用它们

假设我有3个不同的类,它们都有返回int的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();
    }
公共类的东西{
私人项目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接口以查找文档(然后返回到您的答案以理解它)成功了!