标签: marker-interfaces

为什么类需要为序列化实现可序列化标记接口?

Techincally我知道为什么类需要实现serializable.原因是ObjectOutputStream的writeObject方法在写入对象状态之前在内部检查"serializable的实例".

但我的问题是需要什么呢?writeObject方法可以简单地写对象状态是否对象(其状态需要写入)是否实现可序列化?

根据wiki,类实现此接口以指示其非瞬态数据成员可以写入ObjectOutputStream.但问题是为什么类需要实现可序列化以确定字段是否是瞬态的.即使是不实现可序列化的类也应该被序列化(标记为瞬态的字段除外).

将对象标记为可序列化(带有接口)并不能神奇地使该对象可序列化,它一直是可序列化的,只是现在你表达了系统可以自己找到的东西,所以我看不出真正的理由.序列化是现在的方式.

为什么类需要实现序列化标记接口来序列化类?

java serialization marker-interfaces

8
推荐指数
1
解决办法
1万
查看次数

注释可以完全取代标记接口吗?

由于标记接口主要用于标记类,因此可以通过注释实现相同的功能.例如,Cloneable界面可以@Cloneable.

那么仍然需要标记接口或者可以通过Annotations重新定位吗?使用其中任何一个有什么优点/缺点吗?我的意思是比其他人更喜欢?

java annotations marker-interfaces

7
推荐指数
1
解决办法
1386
查看次数

是否有合成和标记接口的解决方法?

我发现自己经常遇到以下问题.我有一些标记接口(为了简单起见,我们使用java.io.Serializable)和几个包装器(Adapter,Decorator,Proxy,...).但是当你将Serializable实例包装在另一个实例(不可序列化)中时,你会失去功能.java.util.RandomAccess也会出现同样的问题,可以通过List实现来实现.有没有一个很好的OOP方式来处理它?

java oop decorator composition marker-interfaces

6
推荐指数
2
解决办法
553
查看次数

标记接口

有人可以解释一下java中标记接口的契约吗?

对于Ex:如果Clonable是没有字段/方法的标记接口,那么clone()定义在哪里?

我们为什么要Clonableclone()使用时实现i/f ?

好吧,我的问题是,如果clone()是一个java.lang.Object类的方法,为什么要实现Clonablei/f来覆盖clone().

有人可以详细说明这个java的惯例吗?

提前致谢

java marker-interfaces

6
推荐指数
1
解决办法
4713
查看次数

自我比较接口在Collections Class中做了什么?

在练习反思的同时,我SelfComparable InterfaceCollections课堂上了解了一下

interface java.util.Collections$SelfComparable
Run Code Online (Sandbox Code Playgroud)

这个界面用于什么?

java generics collections interface marker-interfaces

6
推荐指数
1
解决办法
321
查看次数

标记接口以避免使用通用参数的通用控制器和构造函数

我已覆盖 Microsoft Identity 提供的默认 IdentityUser 和 UserStore。

    public class ApplicationUser<TIdentityKey, TClientKey> : IdentityUser<TIdentityKey>, IApplicationUser<TIdentityKey, TClientKey>
    where TIdentityKey : IEquatable<TIdentityKey>
    where TClientKey : IEquatable<TClientKey>
    {
        public TClientKey TenantId { get; set; }
    }

    public class ApplicationUserStore<TUser, TRole, TIdentityKey, TClientKey> : UserStore<TUser, TRole, IdentityServerDbContext<TIdentityKey, TClientKey>, TIdentityKey>
    where TUser : ApplicationUser<TIdentityKey, TClientKey>
    where TRole : ApplicationRole<TIdentityKey>
    where TIdentityKey : IEquatable<TIdentityKey>
    where TClientKey : IEquatable<TClientKey>
    {
        private readonly IdentityServerDbContext<TIdentityKey, TClientKey> _context;
        private readonly ITenantService<TIdentityKey, TClientKey> _tenantService;
        public ApplicationUserStore(IdentityServerDbContext<TIdentityKey, TClientKey> context, ITenantService<TIdentityKey, TClientKey> tenantService) : …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection marker-interfaces asp.net-identity asp.net-core

6
推荐指数
1
解决办法
393
查看次数

标记接口或布尔方法来识别对象功能?

我正在开发一个较大的Java类层次结构,其中一些具有我在运行时查询感兴趣的特定属性(该属性绝对仅适用于类,而不是特定实例).

我可以创建一个抽象的布尔方法isFooBar(),子类可以实现它来指示属性是否存在:

public abstract class MyBaseClass {
  ...
  public abstract boolean isFooBar();
}
Run Code Online (Sandbox Code Playgroud)

或者我可以使用标记接口FooBarProperty并对接口进行instanceof检查:

public class MyConcreteClass extends MyBaseClass implements FooBarProperty {
   ...
}
Run Code Online (Sandbox Code Playgroud)

或者我猜您甚至可以使用AmitD建议的注释:

@FooBarAnnotation
public class MyConcreteClass extends MyBaseClass {
   ...
}
Run Code Online (Sandbox Code Playgroud)

每种方法的优缺点是什么,通常应该优先考虑哪些方法?

java oop api-design properties marker-interfaces

5
推荐指数
1
解决办法
725
查看次数

标记接口:使它们可互换

我有三个标记接口,用于流畅的API扩展方法:

interface IOne { }
interface ITwo { }
interface IOneOrTwo : IOne, ITwo { }
Run Code Online (Sandbox Code Playgroud)

以及以下扩展方法:

public static IOneOrTwo Foo (this IOne obj, string arg)
{
    // do something with arg
    return obj; // <- possible without cast?
}
Run Code Online (Sandbox Code Playgroud)

问题:是否有可能在不进行投射的情况下返回obj?通常,您需要在这种情况下明确地向下转换,但是,这些接口都不要求底层对象具有任何类型的方法/属性/任何方式.

注意:实际的实现类实现了所有接口.

问题2:为什么实现IOneITwo不是自动让实现也是类型IOneOrTwo

c# marker-interfaces

1
推荐指数
1
解决办法
284
查看次数

我们如何/为什么可以说Java 8中的功能接口是标记接口

在最近的一次采访中,有人问我一个问题:“我们怎么能说java8中的功能接口类似于标记接口”。

我无法回答这个问题。

但是我认为标记甚至没有任何方法,而功能接口必须要覆盖一种方法。

有人可以帮助我理解这是否在某些情况下是有效的论点,或者问题本身是错误的?

java interface marker-interfaces java-8 functional-interface

1
推荐指数
1
解决办法
99
查看次数

java中标记接口的意义是什么,为什么我们不能没有它们?

我已经阅读了有关标记接口的内容,并且对如何在代码中使用它们有了一些了解,但我不明白为什么我们需要它们以及引入这个概念的原因是什么。

我在互联网上搜索,所有的答案都是“他们向 JVM 提供了一些基本信息,以便 JVM 可以执行一些有用的操作”,但问题是为什么 JVM 需要知道这一点以及 JVM 可能执行哪些操作必须执行?为什么我不能只克隆对象而不从 Clonable 扩展类?为什么我不能序列化类对象而不从 Serializable 扩展它?

标记界面没有多大意义,在我看来显然不是一个好的设计。一个没有任何方法的接口???重点是什么?

现在显然在这里使用注释而不是标记接口,但问题仍然是为什么 JVM 需要知道?

java marker-interfaces

1
推荐指数
1
解决办法
646
查看次数

Comparable接口是如何使用compareTo()方法的标记接口?

Comparable接口是如何标记接口的,即使它定义了一个compareTo()方法?请详细说明.

java oop terminology comparable marker-interfaces

0
推荐指数
1
解决办法
2308
查看次数