在Kotlin类中实现接口时:
当我在ClassName上按Alt + Enter时,我可以让IDE通过"实施成员"添加界面的功能.
令人讨厌的是,在Kotlin中,这些函数被添加到类的顶部.我希望它们在类的末尾添加(就像在Java中一样).
我怎样才能做到这一点?
通常,我们可以在kotlin中编写以下代码:
val hasValue : Boolean
@JvmName("hasValue") get() = true
Run Code Online (Sandbox Code Playgroud)
这将生成的方法hasValue()
,而不是getHasValue()
针对Java的互操作.
但是,在一个接口中,这给了我一个编译错误:
val hasValue : Boolean
@JvmName("hasValue") get
Run Code Online (Sandbox Code Playgroud)
抽象类中的以下声明也是如此:
abstract val hasValue : Boolean
@JvmName("hasValue") get
Run Code Online (Sandbox Code Playgroud)
所以这是我的问题:我如何告诉kotlin编译器使用hasValue()
而不是getHasValue()
kotlin接口中的属性的getter(和setter)?
我想了解使用接口vs类来创建角度为2的模型.当我们用Java或C#创建模型时,我们使用模型类来表示在我们的应用程序中传递的数据模型,因此强类型化.
//C#
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
大多数时候,我们会根据我们的要求坚持使用这种模型将数据绑定到数据库.
我看到使用相同方法的示例和教程.
//Java
public class Movie
{
public int ID;
public String Title;
public Date ReleaseDate;
public String Genre;
public float Price;
}
Run Code Online (Sandbox Code Playgroud)
然后,我开始使用angular和typescript进行Web开发.我发现有些人喜欢使用界面来表示他们的模型而其他人喜欢坚持使用类.
//Class
export class Movie {
public string id;
public string title;
public Date ReleaseDate; …
Run Code Online (Sandbox Code Playgroud) 我得到了一个用 C# 编写的库,我正在尝试使用 Python for .NET 调用它。
我需要一个实例的主类有一个构造函数,如:
GDhuClient(IGDhuSettings)
Run Code Online (Sandbox Code Playgroud)
没有(公开的)实现IGDhuSettings
接口的类。当我创建一个 Python 类来实现它时,例如,
class PyGDhuSettings(IGDhuSettings):
...
Run Code Online (Sandbox Code Playgroud)
TypeError: interface takes exactly one argument
如果我没有__new__
方法或者我以正常方式定义一个方法,我会得到:
def __new__(cls):
return super().__new__(cls)
Run Code Online (Sandbox Code Playgroud)
如果我尝试实例化接口,就好像它是一个类,我要么得到相同的错误(没有或 >1 个参数),要么<whatever> does not implement IGDhuSettings
我传递一个参数。
using System;
using System.Reflection;
using System.Runtime.InteropServices;
namespace Python.Runtime
{
/// <summary>
/// Provides the implementation for reflected interface types. Managed
/// interfaces are represented in Python by actual Python type objects.
/// Each of those …
Run Code Online (Sandbox Code Playgroud) 在PHP 7.1.4中,使用严格类型,我有一个简单的面向对象的设置,涉及一些接口,以及一些实现这些接口的类.下面的例子,如你所料,工作正常.
declare(strict_types=1);
interface Loginable {
public function login();
}
interface Upgradeable {
public function upgrade(): Loginable;
}
class Person implements Upgradeable {
function upgrade(): Loginable {
return new PersonAccount();
}
}
class PersonAccount implements Loginable {
public function login() {
;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意Upgradable接口中的升级功能如何需要Loginable返回类型,这是另一个接口.在此示例中,Person类内的升级方法将Loginable接口指定为其返回类型,以匹配接口的规定.
但是,如果我现在尝试更准确地指定Person类的升级方法的返回类型,则会遇到致命错误.
class Person implements Upgradeable {
function upgrade(): PersonAccount {
return new PersonAccount();
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我在这里要完成的是指定升级方法将返回一个对象,该对象根据类实现的接口实现所需返回类型的接口.这对我来说似乎非常合乎逻辑和正确,但PHP会说:
致命错误:Person :: upgrade()声明:PersonAccount必须与Upgradeable :: upgrade()兼容:可登录[...]
正如yivi已经在/sf/answers/3454715351/指出的那样,我想要实现的目标是不可能的.
如果涉及扩展类,我会接受PHP的抱怨,因为扩展类可以覆盖原始方法,这样就不能保证正确的返回类型.但是,在上述场景中,不扩展类.只有接口的实现,其目的是明确保证正确的实现.
请详细说明PHP拒绝接受上述声明返回类型的方法背后的原因!
我正在使用这个问题作为我的问题的基础.
TL; DR:如果您不打算在异步包装器中包装同步代码,那么如何处理长期运行的线程阻塞方法,这些方法实现了一个需要异步实现的接口方法?
假设我有一个连续运行的应用程序来处理工作队列.它是一个服务器端应用程序(主要是无人值守运行),但它有一个UI客户端,可以根据业务流程的要求对应用程序的行为进行更细粒度的控制:在执行期间启动,停止,调整参数,获得进度等
有一个业务逻辑层,服务作为依赖项注入其中.
BLL为这些服务定义了一组接口.
我想让客户端保持响应:允许UI客户端与正在运行的进程交互,我还希望有效地使用线程,因为进程需要可伸缩:根据工作可能有任意数量的异步数据库或磁盘操作在队列中.因此,我正在使用async/await "一直".
为此,我在服务接口中有一些方法,显然是为了鼓励async/await和支持取消,因为它们采用a CancellationToken
,以"Async"命名,并返回Task
s.
我有一个数据存储库服务,执行CRUD操作以持久保存我的域实体.让我们说,目前,我正在使用一个本身不支持异步的API.在将来,我可以用一个替换它,但目前数据存储库服务同步执行大部分操作,其中许多是长时间运行的操作(因为数据库IO上的API阻塞).
现在,我知道返回Task
s的方法可以同步运行.我的服务类中实现BLL中接口的方法将按照我的解释同步运行,但是消费者(我的BLL,客户端等)将假设它们是1:异步运行或2:同步运行很短的时间.方法不应该做的是在异步调用中包装同步代码Task.Run
.
我知道我可以在界面中定义同步和异步方法.
在这种情况下,我不想这样做,因为我试图使用异步"一路"语义,因为我不是在编写一个API供客户使用; 如上所述,我不想稍后将BLL代码从使用同步版本更改为使用异步版本.
这是数据服务接口:
public interface IDataRepository
{
Task<IReadOnlyCollection<Widget>>
GetAllWidgetsAsync(CancellationToken cancellationToken);
}
Run Code Online (Sandbox Code Playgroud)
它的实施:
public sealed class DataRepository : IDataRepository
{
public Task<IReadOnlyCollection<Widget>> GetAllWidgetsAsync(
CancellationToken cancellationToken)
{
/******* The idea is that this will
/******* all be replaced hopefully soon by an ORM tool. */
var ret = new List<Widget>();
// …
Run Code Online (Sandbox Code Playgroud) 以前我问过一个问题没有得到充分回答,因此我决定重新制定我的问题以了解发生了什么:
这是我的类层次结构:
interface I
{
void f();
}
class A : I
{
// non virtual method
public void f()
{
Debug.Log("---->> A ");
}
}
class B : A
{
// non overriding but hiding class A method
public void f()
{
Debug.Log("---->> B ");
}
}
class C : I
{
// non virtual method
public void f()
{
Debug.Log("---->> C ");
}
}
Run Code Online (Sandbox Code Playgroud)
这是执行代码:
Random rnd = new Random();
var randomI = rnd.Next(0, 2);
I i = …
Run Code Online (Sandbox Code Playgroud) 为什么TreeMap
类型Map
没有定义方法tailMap
或headMap
.
Map<String, String> map = new TreeMap<>();
map.tailMap(); //cannot resolve method tailMap
Run Code Online (Sandbox Code Playgroud)
使用显式转换它可以工作:
((TreeMap<String, String>) map).tailMap("a");
Run Code Online (Sandbox Code Playgroud)
随着NavigableMap
一切都很好:
NavigableMap<String, String> map1 = new TreeMap<>();
map1.tailMap("a");
Run Code Online (Sandbox Code Playgroud)
如果我是对的,因为界面Map
缺少相应的方法,尽管面对对象map
是类的具体实现TreeMap
,当然确实拥有这样的方法.
只是寻找更详细的解释.
谢谢!
我正在尝试编写一个示例程序来尝试使用 Go 泛型来实现数据结构。
作为其中的一部分,我想定义一个迭代器接口。我有以下代码:
package collection
type Iterator interface {
ForEachRemaining(action func[T any](T) error) error
// other methods
}
Run Code Online (Sandbox Code Playgroud)
它一直给我以下错误
函数类型不能有类型参数
将类型参数移至方法也不起作用:
type Iterator interface {
ForEachRemaining[T any](action func(T) error) error
// other methods
}
Run Code Online (Sandbox Code Playgroud)
给出错误:
方法不能有类型参数
有没有办法定义通用接口
我理解接口是一组公开的事物,一个系统可以使用它们与其他系统进行交互。我正在阅读有关 WEBRTC 协议的内容,为了了解什么是协议,我查阅了维基百科定义。它或多或少地表示协议是允许两个系统进行通信的规则系统。这不是和界面一样吗?也许我不理解其中之一或两者。
interface ×10
c# ×3
class ×2
java ×2
kotlin ×2
angular ×1
annotations ×1
async-await ×1
asynchronous ×1
dictionary ×1
generics ×1
getter ×1
go ×1
implements ×1
object ×1
oop ×1
php ×1
protocols ×1
python ×1
python.net ×1
pythonnet ×1
return-type ×1
synchronous ×1
treemap ×1
typescript ×1