Java 将对象实例作为泛型传递给方法

Java 将对象实例作为泛型传递给方法,java,generics,Java,Generics,我有一个类似于下面示例的场景 我有两个不同的对象,并且已经从中创建了实例。我需要将这些实例作为泛型传递给方法参数 我尝试将方法参数作为类obj传递,但没有成功 Class A { A() { List<String>collection = new ArrayList<>(); } } Class B { B() { List<String>collection = new ArrayList<>(); } } Class Main()

我有一个类似于下面示例的场景

我有两个不同的对象,并且已经从中创建了实例。我需要将这些实例作为泛型传递给方法参数

我尝试将方法参数作为类obj传递,但没有成功

Class A
{

A()
{
List<String>collection = new ArrayList<>();
}

}

Class B
{

B()
{
List<String>collection = new ArrayList<>();
}

}

Class Main()
{

A a = new A(); 
B b = new B();

methodTest(a);
methodTest(b);

void methodTest(Class<T> genericObj)
{
 genericObj.collection.add("1");
 // I need to pass both the instance A and instance B to 
 genericObj


}


}
A类
{
()
{
Listcollection=newarraylist();
}
}
B类
{
B()
{
Listcollection=newarraylist();
}
}
类Main()
{
A=新的A();
B=新的B();
方法试验(a);
方法试验(b);
void方法测试(类genericObj)
{
genericObj.collection.add(“1”);
//我需要将实例A和实例B都传递给
通用北京
}
}

需要一些建议。

您不会将泛型传递给方法,因为泛型是一种类型,而不是对象

你所做的是,你通过一个物体;在类中声明泛型

例如


最简单的方法是创建一个基类并从中继承a和B。 在方法中,使用基类作为类型。
这是有效的,因为A和B都扩展了它

例如:

class Base {
   List<String> collection;
   Base() {
    collection = new ArrayList<>();
   }
} 

class A extends Base{
    A(){
       super()
    }
}

class B extend Base{
    B(){
       super()
    }
}

void methodTest(Base genericObj)
{
   genericObj.collection.add("1");
}
类基{
清单收集;
Base(){
collection=newarraylist();
}
} 
A类扩展基础{
(){
超级()
}
}
B类扩展基{
B(){
超级()
}
}
void方法测试(基本genericObj)
{
genericObj.collection.add(“1”);
}
另一种可能性是使用接口。如果集合不是相同的类型,因此没有在基对象中定义,那么这将非常有用

使用接口:

interface MyInterface{
  public ArrayList<> getCollection();
}

class A implements MyInterface {

   List<String> collection;
    A(){
    collection = new ArrayList<>();
    }


    public ArrayList<> getCollection(){
        return collection;
    }
}

class B implements MyInterface{
   List<String> collection;
    B(){
       collection = new ArrayList<>();
    }

    public ArrayList<> getCollection(){
        return collection;
    }
}



void methodTest(MyInterface genericObj)
{
   genericObj.getCollection().add("1");
}
接口MyInterface{
公共ArrayList getCollection();
}
类实现MyInterface{
清单收集;
(){
collection=newarraylist();
}
公共ArrayList getCollection(){
回收;
}
}
类实现MyInterface{
清单收集;
B(){
collection=newarraylist();
}
公共ArrayList getCollection(){
回收;
}
}
void方法测试(MyInterface genericObj)
{
genericObj.getCollection().add(“1”);
}

向我们展示您所做的尝试这将不会是任何有效或方便的方法来完成您正在尝试的操作。如果没有一个公共接口,你就不能像这样泛化类。我不能将集合更改为基类。还有其他方法吗?@srinathbalasuramanian为什么不能将其更改为基类?它将不是同一个实例。对于a和B,您将得到一个不同的。我没有对基类进行任何更改的控件。我只能在星期五取零钱mine@srinathbalasuramanian你对我们两人给出的答案投了反对票吗?这不是什么否决票for@theblitz-从技术上讲,不太可能。您需要125个代表点数才能进行向下投票,而OP没有这一点。:)我无法将集合更改为父类。还有其他方法吗?这个答案中有什么可以改进的地方来解决它?@srinathbalasuramanian为什么不在你的帖子中包含这些要求?如果你不断地改变要求,人们怎么能提供一个有效的答案呢?对不起,文斯,我是个新来的发帖人。
class Base {
   List<String> collection;
   Base() {
    collection = new ArrayList<>();
   }
} 

class A extends Base{
    A(){
       super()
    }
}

class B extend Base{
    B(){
       super()
    }
}

void methodTest(Base genericObj)
{
   genericObj.collection.add("1");
}
interface MyInterface{
  public ArrayList<> getCollection();
}

class A implements MyInterface {

   List<String> collection;
    A(){
    collection = new ArrayList<>();
    }


    public ArrayList<> getCollection(){
        return collection;
    }
}

class B implements MyInterface{
   List<String> collection;
    B(){
       collection = new ArrayList<>();
    }

    public ArrayList<> getCollection(){
        return collection;
    }
}



void methodTest(MyInterface genericObj)
{
   genericObj.getCollection().add("1");
}