Java方法中的泛型参数

Java方法中的泛型参数,java,generics,methods,parameters,Java,Generics,Methods,Parameters,我有一个界面: public interface InterfaceA { public ArrayList<? extends Object> b(); public Object b(String string); public void c(Object object); } 有没有办法用“泛型”参数声明一个方法,用不同的对象实现它?有。有可能做出一个决定。大概 public <T> void c(T object); public interfac

我有一个界面:

public interface InterfaceA {
  public ArrayList<? extends Object> b();
  public Object b(String string);
  public void c(Object object);
}

有没有办法用“泛型”参数声明一个方法,用不同的对象实现它?

有。有可能做出一个决定。大概

public <T> void c(T object);
public interface InterfaceA<T> {
    public ArrayList<T> b();
    public T b(String string);
    public void c(T object);
}
public void c(T对象);
也可以创建通用接口。大概

public <T> void c(T object);
public interface InterfaceA<T> {
    public ArrayList<T> b();
    public T b(String string);
    public void c(T object);
}
公共接口a{
公共数组列表b();
公共tb(字符串);
公共无效c(T对象);
}
然后一个实现可能看起来像

public class ClassA<T> implements InterfaceA<T> {
    @Override
    public ArrayList<T> b() {
        // ...
    }

    @Override
    public T b(String string) {
        // ...
    }

    @Override
    public void c(T object) {
        // ...  
    }
}
公共类ClassA实现了InterfaceA{
@凌驾
公共阵列列表b(){
// ...
}
@凌驾
公共TB(字符串){
// ...
}
@凌驾
公共无效c(T对象){
// ...  
}
}

我们不能,因为如果方法参数不同,则会导致过载

我们能做的最接近的事情是在类上声明一个类型参数:

public interface InterfaceA<T> {
    public void c(T object);
}

public class ClassA implements InterfaceA<SomeObject> {
    @Override
    public void c(SomeObject object) {
        object.foo();
    }
}

class SomeObject {
    void foo() {
        System.out.println(1);
    }
}

维基百科对此有一些有趣的说法:。很明显,埃菲尔铁塔有它,它有点争议。

FYI:
public ArrayList b()就足够了。所有Java类都是
对象的后代。
你说得对,我就是这样看的,没有更改,谢谢。好吧,那不起作用,:/无论如何,谢谢,我要尝试另一个答案。我在接口中声明方法,就像你说的:public void c(t Object){…}然后尝试在类中实现它:public(SomeObject){…},我得到了一个错误。@AndrésMarotta Ahhh。。。不,您也使用通用签名实现它。。但是你可以用
SomeObject
来调用它。或者将整个类/接口设置为泛型。你的问题不完全清楚。我会尽力更好地解释我(我不是以英语为母语的人)。我有一些类具有相同的方法,但具有不同的对象。例如,每个类在DB中插入一个对象,但每个类都使用“his”对象进行插入。现在,我想声明一个接口来“分组”这些方法,并强制类实现主题。为此,接口必须是“通用”的,关于要通过实现它的类传递的对象类型。我希望这更清楚。我试过了,唯一能解决的就是错误。我可以这样做:public void c(SomeObject){…},并且我没有得到编译错误。但是我不能像SomeObject类型那样使用“object”。我的意思是,它没有得到他的方法。你应该能够在
ClassA.c
的主体中。看我的编辑。哦,那是我的错。我没有更改参数的名称。真管用!非常感谢。
InterfaceA a = new ClassA();
// passing Object to method which actually
// expects a SomeObject
a.c( new Object() );