自定义类型之间的java转换

时间:2014-04-24 12:47:46

标签: java class

我想知道将自定义类转换为另一个自定义类的最佳方法是什么。 F.E. :

public class TypeA { 
   String test;
}

public class TypeB { 
   String test;
}

2种不同的方式:

 public TypeA convert(TypeB input) {

 TypeA data = null;
 if (input != null) {
      data = new TypeA();
      data.setTest(input.getTest());
 }
 return data;
 }



 public TypeA convert(TypeB input) {

 final TypeA data;
 if (input != null) {
      data = new TypeA();
      data.setTest(input.getTest());
 } else {
      data = null;
 }
 return data;
 }

这两种方法之间没有功能差异,我只是想知道这两种方法中的一种是否更好以及为什么。

谢谢

5 个答案:

答案 0 :(得分:2)

如果我是诚实的,我宁愿在constructor

中这样做

实施例

public TypeA(TypeB typeB) {
    if(typeB != null) {
        this.test = typeB.getTest();
    }       
}

答案 1 :(得分:1)

实例成员会按其默认值自动初始化。对象默认值为null


默认情况下,不会初始化局部变量。如果创建最终变量,则必须设置该值。

在第一个选项中,您无法将其作为最终选项,因为您无法再次分配它。

在第二个选项中,你必须在返回之前初始化它,因为它是一个最终变量。

你可以使用其中任何一个。

答案 2 :(得分:1)

实际上有四种方法,取决于你想要课程的紧密程度。

1)使用复制构造函数

请注意,此术语表示复制实例,因此两者都是同一个类。但它仍然适用于此。

class TypeA {
    String test;
    TypeA(TypeB input) {
        this.test = input.test;
    }
}

class TypeB {
    String test;
}

2)在TypeA

中使用来自方法的静态

这与构造函数基本相同,但可能更合适,因为您可以自由设计构造函数。

class TypeA {
    String test;
    private TypeA() { /* private for demonstration purposes */ }
    static TypeA fromTypeB(TypeB input) {
        TypeA a = new TypeA();
        a.test = input.test;
        return a;
    }
}

class TypeB {
    String test;
}

3)在TypeB中使用静态方法:

这种方法使用的转换技术也出现在许多库中,包括JRE本身。看看Collection.toArray

class TypeA {
    String test;
}

class TypeB {
    String test;
    static TypeA toTypeA() {
        TypeA a = new TypeA();
        a.test = this.test;
        return a;
    }
}

4)像你一样使用转换方法。优点是TypeATypeB之间没有任何耦合。


您真正选择哪一个取决于您的设计,您的需求以及这些课程的目的。

答案 3 :(得分:0)

对于引用内存位置的类的成员,您可能希望调用clone()方法,以便在内存中构造该字段的新版本(这样当您更改TypeA的实例时, TypeB实例中的字段保持不变)。我建议覆盖任一类的克隆方法(为清楚起见)。否则,转换函数几乎相同,并且从作者的角度来看是可读性的。

答案 4 :(得分:0)

如果你想拥有一个尽可能轻松耦合的转换系统,请使用handle the conversions from one type to another的单独类来研究Eclipse本身是如何做到的。有一个中央注册,可以为您提供从Class<A>Class<B>的转换器。