我创建了一个匿名类,其中我声明了一些变量和方法.我的java老师告诉我要把这些私有化.我没有看到改变修饰符有什么不同,因为无论如何这些变量和方法对于匿名类是私有的,所以我更喜欢根本没有修饰符.谁是对的,什么更有意义?请参阅下面的示例代码,其中我选择"map"和"convert"的修饰符而不是将其设为私有.
Collections.sort(list, new Comparator<String>(){
public int compare(String a, String b){
return convert(a).compareTo(convert(b));
}
Map<String, String> map = new HashMap<String, String>();
String convert(String s) {
String u = map.get(s);
if (u == null)
map.put(s, u = s.toUpperCase());
return u;
}
});
Run Code Online (Sandbox Code Playgroud) 内部公开的抽象方法和c#中的虚拟方法吗?
默认情况下,所有方法都是私有的,如果抽象方法是私有的,则派生类将无法使用它,从而产生错误 "virtual or abstract members cannot be private"
我在Java中有一个"私有静态"嵌套类.访问修饰符对于此类中的字段和方法有何意义?我尝试过公开和私有对我的应用程序没有影响.
public class MyList<T>{
private static class Node{ // List node
private Object item;
private Node next;
private Node prev;
private Node(Node next){
this.next = next;
}
private static Node doStuff(){}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图找出在我正在创建的嵌套类中设置和获取属性的最佳方法.
我有一个类,Car有一个嵌套类ControlPanel,并且想要使控制面板的属性只能访问Car和Control Panel类.
(即:不在程序集或命名空间内,不在应用程序中将使用类库)...我已将类访问属性更改为朋友,受保护的朋友,私有,公共,但任何组合都不匹配我的预期结果.
我想更改类的Drive()Sub中的属性,如下所示.
有什么想法吗?
Public Class Car
Dim cp As New ControlPanel
Public Class ControlPanel
Private _Speedometer As Integer = 0
Private _Odometer As Integer = 0
Public Property Speedometer() As Integer
Get
Return _Speedometer
End Get
Protected Set(ByVal value As Integer)
_Speedometer = value
End Set
End Property
Public Property Odometer() As Integer
Get
Return _Odometer
End Get
Protected Set(ByVal value As Integer)
_Odometer = value
End Set
End Property
End Class
Public Sub Drive()
cp.Odometer = …Run Code Online (Sandbox Code Playgroud) 我们可以在C#/ .NET中为get和set属性的访问者指定访问修饰符吗?
如果是这样,那么实施此方法的最佳方法是什么?
在Visual Studio中编写C++时,它坚持在访问修饰符上给我这些神奇可怜的修正 - 如果有人真的喜欢这种方式,我表示哀悼;)(一个笑话人!)
public class MyClass
{
public:
MyClass();
~MyClass();
int wowAnInt();
}
Run Code Online (Sandbox Code Playgroud)
不用说,我想要这个:
public class MyClass
{
public:
MyClass();
~MyClass();
int wowAnInt();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法用任何东西(我有Resharper和Highlighter)或者香草VS来实现这个目标?
我想做这样的事情(例子是简化的,但包含所有关键部分):
class Master
{
type DataType = Int
var counter : DataType = 0
}
class Slave(private val master : Master)
{
val counter = master.counter // (*)
}
Run Code Online (Sandbox Code Playgroud)
在这里(*)我收到错误:
private value master将其定义范围作为Slave.this.master.DataType类型的一部分进行转义
val counter = master.counter
我理解错误,但我不明白原因 - 类型是类的一部分Master,而不是对象master,所以如果类是私有的,而不是对象,这很重要.好吧,至少在理论上.
很容易快速解决方法:
val counter : Master#DataType = master.counter
Run Code Online (Sandbox Code Playgroud)
但我相信这是与以前完全相同的代码的显式版本,它"只"需要更多的输入.这是一个功能吗?
题:
类型(此处为DataType)是否可以依赖于对象,而不是Scala中的类(即每个类实例的类型定义)?
这是场景.作为公开许可的开源API的创建者,我的团队创建了一个基于Java的Web用户界面框架(那么还有什么新东西?).为了在Java中保持良好和有条理,我们使用了命名约定org.mygroup.myframework.x的包,其中x是组件,验证器,转换器,实用程序等等(同样,还有什么是新?).
现在,org.mygroup.myframework.foo.Bar类中的某个地方是void doStuff()我需要执行特定于我的框架的逻辑的方法,我需要能够从我的框架中的其他几个地方调用它,例如org. mygroup.myframework.far.Boo.鉴于Boo既不是Bar的子类也不是完全相同的包,所以方法doStuff()必须声明为public才能被Boo调用.
但是,我的框架作为一种工具存在,允许其他开发人员为其客户创建更简单,更优雅的RIA.但是,如果com.yourcompany.yourapplication.YourComponent调用doStuff(),则可能会产生意外和不良后果.我希望永远不会允许这种情况发生. 请注意,Bar包含其他真正公开的方法.
在象牙塔世界中,我们将重写Java语言并将标记化模拟插入到默认访问中,这将允许我们选择的包结构中的任何类访问我的方法,可能类似于:
[org.mygroup.myframework.*] void doStuff() { .... }
Run Code Online (Sandbox Code Playgroud)
其中通配符是指任何以org.mygroup.myframework开头的包可以调用的类,但没有其他人.
鉴于这个世界不存在,我们还有什么其他好的选择?
请注意,这是由现实生活场景推动的; 名称已被更改以保护有罪.存在一个真正的框架,在其整个Javadoc中,人们会发现公共方法被评论为"这种方法是内部的MYFRAMEWORK而不是其公共API的一部分.请不要打电话!!!!!!" 一些研究表明这些方法是从框架内的其他地方调用的.
事实上,我是一名使用相关框架的开发人员.虽然我们的应用程序已经部署并且取得了成功,但我的团队遇到了很多挑战,我们希望说服我们的老板再也不要使用这个框架了.我们希望通过对框架开发人员做出的糟糕设计决策的深思熟虑的演示来做到这一点,而不仅仅是作为一个咆哮.这个问题将是我们观点中的一个(但有几个),但我们无法理解我们如何以不同的方式完成它.在我的工作场所已经有了一些热烈的讨论,所以我想知道世界其他地方会怎么想.
更新:到目前为止,对两个回答者没有冒犯,但我认为你错过了这个标记,或者我没有表达好.无论哪种方式,我都可以尝试照亮事物.尽可能简单地说,框架的开发人员应该如何重构以下内容.请注意,这是一个非常粗略的例子.
package org.mygroup.myframework.foo;
public class Bar {
/** Adds a Bar component to application UI */
public boolean addComponentHTML() {
// Code that adds the HTML for a Bar component to a UI screen
// returns true if successful
// I need users of my framework to be able to call this method, so
// they can actually add …Run Code Online (Sandbox Code Playgroud) 这个问题最容易用一个例子来说明,所以这里有:
(并非所有实现都能正确编译它,但我想知道这是否是一个错误.)
#include <algorithm>
class Picky
{
friend
Picky *std::copy<Picky const *, Picky *>(Picky const *, Picky const *, Picky *);
Picky &operator =(Picky const &) { return *this; }
public:
Picky() { }
};
int main()
{
Picky const a;
Picky b;
std::copy<Picky const *, Picky *>(&a, &a + 1, &b);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我们的域模型属性都是"内部",以保护我们采用的BDD方法.我真的很喜欢把一切都内部化.
最近我试图让RazorEngine使用其中一个具有内部成员的域模型来处理模板.当它编译时,我收到错误:.Attendee.FirstName' is inaccessible due to its protection level
我尝试将此行添加[assembly: InternalsVisibleTo("RazorEngine")]到我的域模型的AssemblyInfo.cs中,但它似乎没有帮助.
如何在同一项目中使RazorEngine的内部属性可见.
码
public class Attendee : AggregateRoot {
protected internal virtual new long Id { get; protected set; }
protected internal virtual Event Event { get; protected set; }
protected internal virtual bool? Online { get; protected set; }
protected internal virtual string FirstName { get; protected set; }
protected internal virtual string LastName { get; protected set; }
protected internal virtual string Email { get; …Run Code Online (Sandbox Code Playgroud) access-modifiers ×10
c# ×3
java ×3
.net ×2
c++ ×2
class ×1
friend ×1
indentation ×1
methods ×1
private ×1
properties ×1
public ×1
razorengine ×1
scala ×1
scope ×1
static ×1
stl ×1
vb.net ×1