标签: static-class

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

接口与类中的内部类

这两个内部类声明有什么区别?还评论优点/缺点?

案例A:类中的类.

public class Levels {   
  static public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}
Run Code Online (Sandbox Code Playgroud)

和案例B:接口内的类.

public interface Levels{

  public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}
Run Code Online (Sandbox Code Playgroud)

纠正:放置getvalue方法.

进一步的信息:我能够在另一个没有实现接口AT ALL的类中实例化A和B两种情况下的Items类.

public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
 Levels.Items items = new Levels.Items();
}
Run Code Online (Sandbox Code Playgroud)

由于接口未实例化,因此接口内的所有元素都可以通过点符号访问,而无需实例化LEVELS接口,因为您无法实例化接口 - 有效地在可渗透静态引用的接口内定义类.

所以说B案例中的Items类不是静态的没有意义.由于情况A和B都以相同的方式实例化,我不是在寻找静态或内部或嵌套的语义.停止给我关于语义的答案.我想要编译器,运行时和行为差异/优点,或者如果没有,那么就这么说.没有更多的语义答案请!!!!! JVM或.NET VM规范的专家请求这个答案问题,而不是教科书语义学.

java nested-class inner-classes static-class

28
推荐指数
4
解决办法
4万
查看次数

你应该避免静态课吗?

静态类被认为是不好的做法?几天前我读了一篇关于这个的文章(找不到,对不起),基本上说有静态类(特别是那些'帮助'类)通常是坏代码的标志.这是正确的,如果是的话,原因是什么?

code-design static-class

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

@autowired在静态类中

这是一个带有Hibernate的Spring MVC项目.我正在尝试创建一个Logger类,负责将日志输入数据库.其他类只调用具有一些属性的正确方法,这个类应该做所有的魔术.本质上它应该是一个具有静态方法的类,但这会导致autoiering dao对象出现问题.

public class StatisticLogger {
    @Autowired
    static Dao dao;
    public static void AddLoginEvent(LogStatisticBean user){
        //TODO code it god damn it
    }
    public static void AddDocumentEvent(LogStatisticBean user, Document document, DocumentActionFlags actionPerformed){
        //TODO code it god damn it
    }
    public static void addErrorLog(Exception e, String page,  HashMap<String, Object> parameters){
        ExceptionLogBean elb=new ExceptionLogBean();
        elb.setStuntDescription(e);
        elb.setSourcePage(page);
        elb.setParameters(parameters);
        if(dao!=null){ //BUT DAO IS NULL
            dao.saveOrUpdateEntity(elb);
    }
}
Run Code Online (Sandbox Code Playgroud)

怎么做对了?我该怎么做才能使dao对象为null?我知道我可以将它作为方法参数传递,但这不是很好.我猜测autowired无法在静态对象上工作,因为它们是为早期创建的,所以尚未创建自动维护机制.

spring hibernate spring-mvc autowired static-class

21
推荐指数
2
解决办法
4万
查看次数

Java/C#静态类之间的主要区别是什么?

在C#中,静态类是一个类,除了不支持继承之外,还可以具有"普通"类除了实例成员之外的任何类型的成员.

不太确定静态类在java中是如何工作的,但基于我看到的有限数量的java代码,我很清楚它们的工作方式并不完全相同.

有人可以列举一下差异吗?

c# java static-class

13
推荐指数
2
解决办法
4896
查看次数

如何在非静态实例对象中包装静态类(动态)

我有一个有趣的问题.我需要动态包装静态类.即返回一个非静态实例给我的调用者.例如:

public object CreateInstance(string className) {
  Type t = assembly.GetType(className);
  if (IsStatic(t)) {
    return CreateStaticWrapper(t);
  } else {
    return Activator.CreateInstance(t);
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我需要的是如何实现的指针CreateStaticWrapper.

注意:遗憾的是我无法使用Dynamic对象.

那么我的选择是什么?我不是那么热衷于学习IL一代吗?如果IL生成(Reflection.Emit,或者现在还有其他方法吗?)是什么方法,那么有没有人有指针?

编辑:重要的是要注意我可以返回代表词典.所以我可以使用Delegate.CreateDelegate这个,但我似乎无法解决如何处理重载方法和通用方法.

Edit2:另一种选择是使用Emit将空构造函数注入到类型中,再次指向任何指针?甚至可以在标记为静态的类型上进行此操作吗?static关键字是否会进入IL?

Edit3:对于一些上下文,我将它传递给javascript环境,请参阅: 我的项目.所以我希望能够(在JavaScript中):

var fileHelper = .create('System.IO.File');
if (fileHelper.Exists(fileName)) { fileHelper.Delete(fileName); }
Run Code Online (Sandbox Code Playgroud)

谢谢大家.

.net c# instance non-static static-class

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

Bloch Effective Java - 支持非静态的静态类 - 有多少个实例?

我想知道封闭类可以创建多少个静态成员类的实例.我只假设一个,但是Bloch的以下摘录对我来说没有意义.

引用Joshua Bloch的有效Java - 项目22*:支持非静态的静态成员类.

私有静态成员类的常见用法是表示由其封闭类表示的对象的组件.例如,考虑一个Map键,它将键与值相关联.许多Map实现都为地图中的每个键值对都有一个内部Entry对象.虽然每个条目都与一个映射关联,但条目上的方法(getKey,getValue和setValue)不需要访问映射.因此,使用非静态成员类来表示条目是浪费的:私有静态成员类是最好的.如果您不小心在条目声明中省略了静态修饰符,则地图仍然有效,但每个条目都将包含对地图的多余引用,这会浪费空间和时间.

他声明地图为地图中的每个键值对创建了一个Entry对象,即静态成员类的多个实例.

所以我的假设是错误的!这意味着我对静态成员类的理解是错误的.每个人都知道静态成员变量的行为方式,例如经典的静态最终字符串 - 只有一个对象的实例.

这是否意味着当实例化封闭对象时,实际上没有实例化静态成员类?

那么在这种情况下,使用静态成员类进行Entry的Map有什么意义呢?为什么不在API上使用接口?然后,每个其他Collections类都可以提供它自己的实现.

[*]刚才意识到它是我所拥有的PDF版本的第18项

java oop nested-class static-class

10
推荐指数
2
解决办法
2829
查看次数

Java中的内部静态类

使用内部静态类有什么好处?我应该在哪里选择其他选项呢?

它的内存如何分配?

java memory-management static-class

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

PHP静态类或命名空间

我想要衡量人们对使用静态类而不是命名空间的看法.我来自C++背景,我非常喜欢它的语法以及它如何让你构建代码.我最近决定将代码分组为逻辑单元而不仅仅是文件.例如,我更喜欢User :: login to user_login之类的调用.所以,我做了一些谷歌搜索,并松了一口气,发现PHP有名称空间.我的解脱并没有持续多久,我真的不喜欢语法; 它为我的函数调用增加了更多的混乱.所以,目前我正在使用静态类来模拟命名空间.这有什么缺点吗?

我在PHP Namespaces vs Classes中发现了一个类似的问题,但是没有进行大量的讨论.

还有,有办法避免以下情况:

class Test {
 public static void myFunc() {
  Test::myOtherFunc();
 }
 public static void myOtherFunc() {

 }
}
Run Code Online (Sandbox Code Playgroud)

我假设可以在不指定名称的情况下调用同一类中的函数,但显然不是.是否有任何变通方法(例如在C++中有using关键字).

php namespaces static-class

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

静态类VS私有构造函数

今天,我一直在阅读静态类和私有构造函数.

静态类 - 我们无法在静态类上创建实例.我们不能继承静态类.仅生成单个实例.

私有构造函数 - 我们无法创建实例.我们不能继承.(我不知道生成了多少个实例.)

我创建了两个控制台应用程序,一个用于静态类,一个用于私有构造函数.

静态类代码

在此输入图像描述

我理解生成的单个对象作为构造函数被调用一次.

私有构造函数代码

在此输入图像描述

现在,我不明白是否生成了任何对象.

我有两个问题.

问题1.我没有发现Private构造函数和Static类之间有任何特别的区别.你能告诉我在哪种情况下我应该使用Private Constructor,我应该在哪里使用Static类,因为我可以使用它们.

问题2.如果我使用私有构造函数,会生成多少个对象?

谢谢.

编辑:

我认为人们不理解我的问题.我知道静态构造函数总是在第一个引用上调用一次.静态构造函数用于初始化类的静态成员.

问题1.我有一种情况:我需要创建一个无法实例化的类.我可以通过静态类或私有构造函数来完成.所以我的问题是"两者之间有什么区别吗?我应该使用哪一个?"

问题2.如果我使用私有构造函数,创建了多少个对象?如果answer为0,则私有构造函数的内存分配在CLR中如何工作.如果我使用私有构造函数,则没有内存分配.

c# clr object private-constructor static-class

5
推荐指数
2
解决办法
7374
查看次数