Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将任何类型的对象传递给类B_Java_Object_Instance Variables - Fatal编程技术网

Java 将任何类型的对象传递给类B

Java 将任何类型的对象传递给类B,java,object,instance-variables,Java,Object,Instance Variables,我希望能够将对象从任何类传递到特定类。我该怎么做?我在接收类的构造函数中传递对象。我知道的一个解决方法是使用静态变量,但我需要整个对象,而不仅仅是变量 public class tryitout { public static void main(String[] args) { A a = new A(); B b = new B(a); b.print(); } } class A implements Serializable { public

我希望能够将对象从任何类传递到特定类。我该怎么做?我在接收类的构造函数中传递对象。我知道的一个解决方法是使用静态变量,但我需要整个对象,而不仅仅是变量

 public class tryitout
{
public static void main(String[] args) {        
    A a = new A();
    B b = new B(a);
    b.print();
}
}
class A implements Serializable
{
 public int a;
 public String b;

A()
{
    this.a = 12;
    this.b =" nach";
}
}

class B
{
  Object obj;
  B(Object o)
 {
  obj = o;
 }
void print()
{

    System.out.println(obj.a + " "+ obj.b);
}
}

可能使用静态块和匿名块之类的东西

公共类HelloWorld{
公共静态void main(字符串[]args){
B ob1=新的B();
C ob2=新的C(B.ob);
D ob3=新的D();
C ob4=新的C(ob3.ob);
}
}
甲级
{
//这是空类,只是为了创建对象
公共工作
{
系统输出打印(“测试”);
}
}
B类
{
公共静态广播;
static{ob=newa();}//加载类后调用static
}
C类
{
公共C(){}//默认构造函数
公共C(A){A.imWorking();}
}
D类
{
公共广播;
{ob=new A();}//每当创建一个新对象时,一个规则块就会调用它
}

更多信息块和匿名块][1]

使用泛型:

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class tryitout {
    public static void main(String[] args) {
        ClassA a = new ClassA("sap",11);
        ClassB<ClassA> b = new ClassB<ClassA>(a);
        b.print();
    }
}

public class ClassA {

    private String name;
    private int id;

    public ClassA(String name, int id) {
        super();
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "ClassA [name=" + name + ", id=" + id + "]";
    }
}

public class ClassB<T> {

    private T genericObj;

    public ClassB(T genericObj){
        this.genericObj = genericObj;
    }

    public void print() {
        Field nameField = getField("name");
        Field idField = getField("id");
        try {
            System.out.println(nameField.get(genericObj));
            System.out.println(idField.getInt(genericObj));
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    private Field getField(String FieldName) {
        Field fld = null;
        try {
            fld = genericObj.getClass().getDeclaredField(FieldName);
            if(Modifier.isPrivate(fld.getModifiers())) {
                fld.setAccessible(true);//To get access over private fields
            } 
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
        return fld;
    }
}

如果需要,那么use AB将从各种其他类接收多个对象。不包含在代码中。因此,创建一个带有获取变量方法的接口,让所有可以发送到B的类实现它,并声明
SomeInterface obj谢谢你!我知道有些事情是可能的。

public class TypeClass {
    protected String name;
    protected int id;

    protected void paint(){
        System.out.println("name: " + name + " | id: " + id);
    } 
}

public class ClassC extends TypeClass{
    public ClassC(String name, int id) {
        super();
        this.name = name;
        this.id = id;
    }

    @Override
    public String toString() {
        return "ClassA [name=" + name + ", id=" + id + "]";
    }
}

package javaConcept.generics;

public class ClassD {
  private TypeClass typeClass;
  public ClassD(TypeClass typeClass) {
      this.typeClass = typeClass;
  }

  public void newPaint() {
      typeClass.paint();
  }
}

public class TempoClass {
    public static void main(String[] args) {
        ClassC c = new ClassC("sap",11);
        ClassD b = new ClassD(c);
        b.newPaint();
    }
}