从接口实现方法但具有不同的参数

Luc*_*rin 2 java oop polymorphism

我正在寻找一种很好的方法来使用在接口中定义但具有不同参数类型的相同方法的不同实现.这可能吗?

为了澄清这一点,假设我有一个接口数据库和两个实现类Database1和Database2.数据库有一个方法createNode(...)和另一个modifyNode(...).问题是对于Database1,createNode方法的返回类型应该是long(标识符).但是对于Database2来说,它将是一个特定于该技术的对象(在这种情况下是OrientDB,但这并不重要,当然,它只是扩展Object的东西).并且两个create(...)返回类型都应该用作modifyNode(...)参数之一.

我想要做的是:

`public interface Database {
    public Object createNode(...);
    public void modifyNode(Object id, ...);
    ...
 }`

public class Database1 { 
    @Override
    public Object createNode(...) { 
        ...
        long result = // obtain id of created node
        return Long.valueOf(result);
    }

    @Override
    public void modifyNode(Object id, ...) { 
        ...
        // use id as ((Long)id).longValue();
    }
}

public class Database2 { 
    @Override
    public Object createNode(...) { 
        ...
        SomeObject result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(Object id, ...) { 
        ...
        // use id as (SomeObject)id
    }
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来做到这一点.特别要避免长 - >长和长 - >长转换.我在StackOverflow中看到了许多类似的问题,但它们都不是我想要的.非常感谢你提前.

lif*_*fus 6

这是泛型的一个例子

数据库

public interface Database<T> {
    public T createNode(...);
    public void modifyNode(T id, ...);
    ...  
}
Run Code Online (Sandbox Code Playgroud)

数据库1

class Database1 implements Database<Long> { 
    @Override
    public Long createNode(...) { 
        ...
        long result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(Long id, ...) { 
        ...
        // use id
    }
}
Run Code Online (Sandbox Code Playgroud)

DATABASE2

public class Database2 implements Database<SomeObject> { 
    @Override
    public SomeObject createNode(...) { 
        ...
        SomeObject result = // obtain id of created node
        return result;
    }

    @Override
    public void modifyNode(SomeObject id, ...) { 
        ...
        // use id as (SomeObject)id
    } 
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,不要担心自动装箱.您正在使用JDK> = 5,因为有@Override注释.