Статические методы в интерфейсах Java должны быть реализованы классами, реализующими интерфейс.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Статические методы в интерфейсах Java должны быть реализованы классами, реализующими интерфейс.

Сообщение Anonymous »

Я знаю, что в интерфейсах Java можно определять статические методы, привязанные к самому интерфейсу. Однако я хотел бы определить подпись статического метода, который будет реализован классом, реализующим интерфейс. Это позволит использовать шаблон проектирования под названием «Статический метод создания».
Я не могу определить статический метод в интерфейсе, поскольку реализация зависит от конкретного класса. Кроме того, я не могу просто притворяться, что мои классы будут иметь метод статического создания, потому что я хочу вызывать этот метод рекурсивно, как в следующем примере Rust.
Я могу сделать это в Ржавчина:

Код: Выделить всё

fn main() {
Double::zero().print();
Complex::::zero().print();
Dual::::zero().print();
Dual::::zero().print();
Complex::::zero().print();
}

trait SetElement
{
fn to_string( &self ) -> String;

fn print( &self )
{
println!( "{}" , self.to_string() );
}
}

trait AdditiveUnitalMagma: SetElement
{
fn zero() -> T;
}

struct Double
{
x: f64,
}

impl SetElement for Double
{
fn to_string( &self ) -> String
{
self.x.to_string()
}
}

impl AdditiveUnitalMagma for Double
{
fn zero() -> Double
{
Double{ x: 0.0 }
}
}

struct Complex
{
x: T,
y: T,
}

impl SetElement for Complex
{
fn to_string( &self ) -> String
{
"(".to_owned() + &self.x.to_string() + ") + i (" + &self.y.to_string() + ")"
}
}

impl AdditiveUnitalMagma for Complex
{
fn zero() -> Complex
{
Complex{ x: T::zero() , y: T::zero() }
}
}

struct Dual
{
a: T,
b: T,
}

impl SetElement for Dual
{
fn to_string( &self ) -> String
{
"(".to_owned() + &self.a.to_string() + ") + epsilon (" + &self.b.to_string() + ")"
}
}

impl AdditiveUnitalMagma for Dual
{
fn zero() -> Dual
{
Dual{ a: T::zero() , b: T::zero() }
}
}

Знаете ли вы, есть ли способ сделать что-то подобное на Java? То есть иметь возможность рекурсивно использовать метод статического создания как:

Код: Выделить всё

public static void main(String[] args) {
Double.zero().print();
Complex.zero().print();
Dual.zero().print();
Dual.zero().print();
Complex.zero().print();
}
Есть ли лучший способ обеспечить аналогичную функциональность? Есть ли причина, по которой Java избегает такой реализации, или это просто плохой дизайн языка?

Подробнее здесь: https://stackoverflow.com/questions/785 ... plement-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»