好,因为所有你需要的是一个键入 UUID你可以简单地使用泛型创建一个接口。
package com.stackoverflow.q1747780;
public interface UUIDTyped<T>
{
public UUID value();
}
现在假设Person和Address的UUID是从不同的源创建您可以为每个类,实现该接口。
package com.stackoverflow.q1747780;
import java.util.UUID;
public class UUIDFactory
{
public static class PersonUUID implements UUIDTyped<Person>{
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.UUIDTyped#value()
*/
@Override
public UUID value() {
return UUID.randomUUID();
}};
public static class AddressUUID implements UUIDTyped<Address>{
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.UUIDTyped#value()
*/
@Override
public UUID value() {
return UUID.randomUUID();
}};
public <T> UUIDTyped<T> newUUID() {
return new UUIDTyped<T>()
{
/**
* There is no difference on how Person and Address UUIDs are generated
*/
@Override
public UUID value() {
return UUID.randomUUID();
}
};
}
public UUIDTyped<Person> newPersonUUID(){
return new PersonUUID();
}
public UUIDTyped<Address> newAddressUUID(){
return new AddressUUID();
}
}
概念
package com.stackoverflow.q1747780;
import junit.framework.Assert;
import org.junit.Test;
public class UUIDFactoryTest
{
@Test
public void testPersonUUID()
{
UUIDFactory uuidFactory = new UUIDFactory();
UUIDTyped<Person> newUUID = uuidFactory.newPersonUUID();
Assert.assertNotNull(newUUID.value());
}
@Test
public void testAddressUUID()
{
UUIDFactory uuidFactory = new UUIDFactory();
UUIDTyped<Address> newUUID = uuidFactory.newAddressUUID();
Assert.assertNotNull(newUUID.value());
}
}
否则证明你可以逃脱只是虚拟接口。概念
package com.stackoverflow.q1747780;
import junit.framework.Assert;
import org.junit.Test;
public class UUIDFactoryTest
{
@Test
public void testNewUUID()
{
UUIDFactory uuidFactory = new UUIDFactory();
UUIDTyped<Person> newUUID = uuidFactory.newUUID();
UUIDTyped<Address> addressUUID = uuidFactory.newUUID();
Assert.assertNotNull(newUUID.value());
Assert.assertNotNull(addressUUID.value());
}
}
的
最后证明你的服务就会像
package com.stackoverflow.q1747780;
import java.util.List;
public interface Service<T>
{
public List< UUIDTyped<T> > search(String text);
public T fetch(UUIDTyped<T> uuid);
}
与PersonService类
package com.stackoverflow.q1747780;
import java.util.List;
public class PersonService implements Service<Person>
{
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.Service#fetch(com.stackoverflow.q1747780.UUIDTyped)
*/
@Override
public Person fetch(UUIDTyped<Person> uuid) {
return null;
}
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.Service#search(java.lang.String)
*/
@Override
public List< UUIDTyped<Person> > search(String text) {
return null;
}
}
和AddressService类
package com.stackoverflow.q1747780;
import java.util.List;
public class AddressService implements Service<Address>
{
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.Service#fetch(com.stackoverflow.q1747780.UUIDTyped)
*/
@Override
public Address fetch(UUIDTyped<Address> uuid) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.stackoverflow.q1747780.Service#search(java.lang.String)
*/
@Override
public List<UUIDTyped<Address>> search(String text) {
// TODO Auto-generated method stub
return null;
}
}
测试正确类型PersonService
package com.stackoverflow.q1747780;
import java.util.List;
import org.junit.Test;
public class PersonServiceTest
{
@Test
public void testFetch()
{
UUIDFactory uuidFactory = new UUIDFactory();
PersonService service = new PersonService();
Person person = service.fetch(uuidFactory.newPersonUUID());
}
@Test
public void testSearch()
{
PersonService service = new PersonService();
List< UUIDTyped<Person> > uuidList = service.search("foo");
}
}
测试正确类型AddressService
package com.stackoverflow.q1747780;
import java.util.List;
import org.junit.Test;
public class AddressServiceTest
{
@Test
public void testFetch()
{
UUIDFactory uuidFactory = new UUIDFactory();
AddressService service = new AddressService();
Address address = service.fetch(uuidFactory.newAddressUUID());
}
@Test
public void testSearch()
{
AddressService service = new AddressService();
List< UUIDTyped<Address> > uuidList = service.search("foo");
}
}
我第二此选项。 +1 – 2009-11-17 10:51:45