Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 有没有办法在Ruby中强制实现接口方法?_Java_Ruby On Rails_Ruby_Interface - Fatal编程技术网

Java 有没有办法在Ruby中强制实现接口方法?

Java 有没有办法在Ruby中强制实现接口方法?,java,ruby-on-rails,ruby,interface,Java,Ruby On Rails,Ruby,Interface,我目前正在开发一个中央身份验证API(RubyonRails),它将根据用户的电子邮件地址域与许多其他提供商进行身份验证 如果我使用java,这将是一个典型的接口用例。考虑到我正在使用Ruby,我仍然希望使用接口构造,但不确定如何强制实现接口方法 这个接口的目的是至少现在有一个已验证的?方法 一个示例实现。它对本地数据库中的用户进行身份验证 # internal_user.rb class InternalUser < User def authenticated?(email, pa

我目前正在开发一个中央身份验证API(RubyonRails),它将根据用户的电子邮件地址域与许多其他提供商进行身份验证

如果我使用java,这将是一个典型的接口用例。考虑到我正在使用Ruby,我仍然希望使用接口构造,但不确定如何强制实现接口方法

这个接口的目的是至少现在有一个
已验证的?
方法

一个示例实现。它对本地数据库中的用户进行身份验证

# internal_user.rb
class InternalUser < User
  def authenticated?(email, password)
    user = User.find_for_database_authentication(email: email)
    user && user.valid_password?(password) && !user.confirmed_at.nil?
  end
end
#internal_user.rb
类内部用户<用户
def已验证?(电子邮件、密码)
user=user.find\u用于数据库身份验证(电子邮件:email)
用户和用户。有效的密码?(密码)和&!user.confirated_at.nil?
结束
结束

因此,当我向API添加更多的提供程序支持时(即,实现此接口的更多类),我如何确保这些新类将实现此接口,换句话说,确保已实现
验证?
方法?

Ruby没有任何类似于Java的接口。对于,由每个类决定是否响应方法调用

如果要显示方法应在子类中实现,可以在父方法中引发异常:

class User
  def authenticated?(*p)
    raise NotImplementedError, "IMPLEMENT ME IN #{self.class}##{__method__}"
  end
end

class InternalUser < User
end

InternalUser.new.authenticated?('user', 'user@test.com')
#interface.rb:3:in `authenticated?': IMPLEMENT ME IN InternalUser#authenticated? (NotImplementedError)
类用户
def认证?(*p)
引发NotImplementedError,“在#{self.class}#{uuuu方法}中实现我”
结束
结束
类内部用户<用户
结束
InternalUser.new.authenticated?('user','user@test.com')
#interface.rb:3:in'authenticated':在InternalUser#authenticated中实现ME?(未实现错误)

看看这篇文章:Ruby没有抽象类、方法或接口,但如果您真的需要,它提供了构建它的工具。但最后雅格尼。谢谢你的回答。我能够使用duck类型强制方法实现