Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要一个关于构造接口的建议

我需要一个关于构造接口的建议
EN

Stack Overflow用户
提问于 2011-12-23 16:31:24
回答 3查看 55关注 0票数 0

我有一个类似如下的结构

代码语言:javascript
运行
AI代码解释
复制
   Interface A
   Interface B extends Interface A
   abstract Class C implements Interface B
   now concrete Class D extends Class C

现在我在一个不同的类中使用接口B,并返回具体的类D对象。

接口B包含getter和setter以及修改方法。

我想要的是以某种方式从接口B中取出所有的getter,并将它们放在一个单独的接口中,这样当我返回一个具体的对象时,我就不能访问接口B的setter和修饰符。但是我想使用接口B作为这个新构建的只读具体对象的返回对象。我不知道如何做到这一点?

EN

回答 3

Stack Overflow用户

发布于 2011-12-23 16:43:59

实现这一点的一种方法是创建一个只读包装器对象,该对象实现接口B,将getter传播到包装的对象,并从setter和修饰符中引发异常(如IllegalAccessEXceptionInvalidStateException)。

票数 1
EN

Stack Overflow用户

发布于 2011-12-23 16:43:41

听起来您指的是代理设计模式:http://en.wikipedia.org/wiki/Proxy_pattern

在您的例子中,您希望Interface B支持获取/设置某些字段,但您希望它提供一个特定的代理来设置和获取这些字段,而不是直接编辑它们。

这很少这样做,但您可以创建一个内部接口,它是特定于您想要支持的接口的本地接口。例如:

代码语言:javascript
运行
AI代码解释
复制
public interface Proxiable {

    public static interface Proxy
    {

    }


    public ProxySub getProxy();
}

因此,您的接口定义了一个代理接口--任何扩展您的接口的人都必须提供一个代理提供程序。

然而,除非你有一个很好的理由这样做,否则你可能会过于抽象。接口足够通用,通常将如何实现方法的细节留给子类就足够了,而不是在接口级别强制这种超结构。

票数 0
EN

Stack Overflow用户

发布于 2011-12-23 17:48:06

详细阐述@rsp的优秀建议:

创建“只读”界面

代码语言:javascript
运行
AI代码解释
复制
   public interface MyInterfaceRO {
      public int getFoo();
      public String getBar();
      // etc...
   }

创建"read-write“接口,对应于您的B

代码语言:javascript
运行
AI代码解释
复制
   public interface MyInterfaceRW extends MyInterfaceRO {
      public void setFoo(int foo);
      public void setBar(String bar);
      // ...
   }

做你想做的(防止修改)的最简单的方法就是返回MyInterfaceRO。调用者(除非他们进行强制转换)将没有能力调用setFoo(),事实上,在他们的集成开发环境中,他们甚至不会看到.setFoo()作为一个选项。

我不明白为什么你真的想返回一个类型B(上面是我的RW ),但是,如果你这样做了,你就会被拥有查看和调用setFoo()能力的调用者所困扰。您最好的选择可能是遵循java集合中设置的先例并抛出一个UnsupportedOperationException。为了方便起见,您可以提供一个方法

公共布尔型isModifiable();

但是你不能强迫调用者使用和尊重它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8618378

复制
相关文章
在MacOSX机器上设置JenkinsCI服务器
Jenkins Wiki提供了用于Jenkins安装的选项列表,但没有提及Mac OSX。尽管它提到了Docker,但我只听说过有关Docker的好消息。在本文中,我将坚持使用自制软件。在继续操作之前您需要在Mac上安装和配置JDK。
DevOps云学堂
2020/07/24
2.5K0
Archiva 仓库提示文件没有找到
如果提示的是 404 的话,提示你的 Archiva 在可能的源仓库中已经进行了搜索,但是没有找到。
HoneyMoose
2020/04/13
6750
Archiva 仓库提示文件没有找到
Ubuntu 上使用 ADB 备份 Android 数据
adb全称Android Debug Bridge,是Android SDK中的一个工具, 使用adb可以直接操作管理Android模拟器或者真实的Andriod设备,就是起到调试桥的作用。
会长君
2023/04/25
7380
在mac上使用adb与fastboot
要在OSX上管理Android手机上的文件,需要下载安装这个官方工具http://www.android.com/filetransfer/
老高的技术博客
2022/12/27
2.6K0
在mac上使用adb与fastboot
在 MAC OS X 安装 ADB (Android调试桥)
什么是 ADB? Android调试桥( adb )是一个开发工具,帮助安卓设备和个人计算机之间的通信。 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接。 adb 还可被用来与电脑上运行的
昨天50还没用完
2018/06/29
9.3K0
ADB 学习(4):adb shell (上)
安卓系统是基于Linux系统开发,也就支持常见的Linux的命令,这些命令都保存在手机 “/system/bin” 的目录下,我们连接手机就可以使用命令 adb shell 来执行这些命令。
Mokwing
2020/09/08
2.6K0
软件测试|Appium WebView 技术原理
混合应用测试或微信小程序测试,都会涉及到 WebView 组件,这节内容将分析一下 WebView 的技术原理。首先通过日志分析查看 Appium 的运行过程。
霍格沃兹测试开发Muller老师
2023/01/09
8260
android 调试 adb
一、包名和界面名的概念 1.包名(package):决定程序的唯一(不是应用名) 2.界面名(activty):粗浅的一个界面,对应着一个界面
bosh123
2020/08/02
7400
自动化测试微信小程序
Mac 环境下搭建 appium 1 安装homebrew 首先命令行检查是否安装:
赵云龙龙
2019/09/25
2.8K0
自动化测试微信小程序
MacOSX 安装 TensorFlow
TensorFlow 安装的前提是系统安装了 Python 2.5 或更高版本,教程中的例子是以 Python 3.6(Anaconda 3 版)为基础设计的。为了安装 TensorFlow,首先确保你已经安装了 Anaconda。可以从网址(https://www.anaconda.com/distribution/#download-section)中下载并安装适用于 Windows/macOS 或 Linux 的 Anaconda。
叉叉敌
2020/02/14
9310
MacOSX 安装 TensorFlow
使用adb logcat命令显示Android设备上的Log日志
实现这个功能的前提是使用adb命令,所以必须要有手机和电脑,还有安装adb,adb程序是很小的几M就可以。
全栈程序员站长
2022/06/28
12.9K0
使用adb logcat命令显示Android设备上的Log日志
Android 调试桥 (adb)
adb 包含在 Android SDK 平台工具软件包中。您可以使用 SDK 管理器下载此软件包,该管理器会将其安装在 android_sdk/platform-tools/ 下。
云深无际
2021/04/14
5.4K0
Android 调试桥 (adb)
Android 常见adb命令
C:\Users\laiyu>adb push d:\\WiFi.apk /mnt/sdcard/
授客
2019/09/11
7910
Start an Android App by ADB
To be more geek,I began to start an Android App by using adb.Thanks to Google.It’s possible and powerful. The tool we use to make it is ADB(Android Debug Tool),For more detailed use please visit http://developer.android.com/tools/help/adb.html#shellcommands Actually What I use here is
技术小黑屋
2018/09/04
1K0
安卓安全测试框架--drozer环境搭建
随着app的质量要求不断的越来越高,跟随着我们的技术的不断进步,对于安全测试的需求也是逐渐增多,那么针对app,我们如何做安全测试呢,工欲善其事必先利其器。我们这节课看下安卓安全测试工具--drozer的环境搭建。入门第一步就是环境搭建。
雷子
2021/03/15
1.5K0
安卓安全测试框架--drozer环境搭建
Android性能稳定性测试工具mobileperf
天猫团队开源的PC Android性能稳定性测试工具,可以收集Android性能数据: cpu 内存 流畅度fps logcat日志 流量 进程线程数 进程启动日志,mobileperf也支持原生monkey test。那么我们先来看看如何安装它。
雷子
2021/03/15
2.4K0
Android性能稳定性测试工具mobileperf
自动化-Appium-环境搭建-Android(Java版)
JDK(Java Development Kit)是Java语言的软件开发工具包,主要用于移动设备、嵌入式设备上的Java应用程序。JDK是整个Java开发的核心,它包含了Java的运行环境,Java工具和Java基础的类库。
wangmcn
2022/07/25
5.2K0
自动化-Appium-环境搭建-Android(Java版)
Android ADB命令大全
adb shell cat /sys/class/net/wlan0/address
软件测试君
2019/06/03
1.2K0
Android adb命令大全
一般在安装的时候先敲出adb install然后直接将apk文件拖到MS Dos窗口中即可,然后点击回车即可自动安装。
程序员飞飞
2020/02/27
1.4K0
点击加载更多

相似问题

在MacOSX上安装Android/Eclipse - adb不工作

30

在访问adb时没有找到Android findstr

15

‘`adb’文件没有显示在Android 11仿真程序上

14

Android演播室-无法在ubuntu上找到adb

23

未找到Android SDK文件: adb -但在哪个adb中可见

151
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档